SVN就是这么简单

什么是SVN

SVN全称:Subversion,是一个开放源代码的版本控制系统

Svn是一种集中式文件版本管理系统。集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。

集中式文件版本控制器:将所有的文件都交由服务器来进行统一的管理。既然是有服务器的,那么就需要联网进行操作了。

为什么要使用SVN

我们写一个项目一般都是一个团队来写,如果我们没有用SVN的话,那么我们只能在团队中互相拷贝对方的代码来完成我们的项目

SVN还有如下的好处:

  • 轻松比较不同版本间的细微差别【修改了代码,就有版本号,还能知道修改前后的数据】
  • 及时了解团队中其他成员的进度【如果没有把代码提交到服务器中,就是做得比较慢了】
  • 广域网共享【连上局域网就可以代码共享了】
  • 协同工作,大大提高团队工作效率

快速了解SVN

配置库

在SVN中有配置库这么一个概念,那它是什么东东呢??

它储存所有的数据,配置库按照文件树形式储存数据

  • 包括目录和文件

任意数量的客户端可以连接到配置库,读写这些文件.并且可以添加读写日志,有权限的用户很方便的看到这些修改

工作副本

我们从上面已经知道了,我们可以从配置库中得到想要的文件。那么我们要把文件从配置库下载下来。这个下载下来的区域就是工作副本

这个工作副本其实就是我们工作的区域,我们对那些文件修改完,就能够再次提交到配置库中了

SVN命令

我们简单来学习几条SVN的命令,SVN有图形界面的功能,因此命令学习也不是必须的。了解一下….

    ---创建服务器端版本库
    svnadmin create 版本库路径 
    ---启动SVN服务器端
    svnserve -d -r 版本库路径 
    ---在系统服务中注册svn服务器
    sc create svn binPath= "C:\Program Files\TortoiseSVN\bin\svnserve.exe --service -r D:\itcast\svnserver\20150118svn" DisplayName= "svn服务"
    ---删除系统服务中的 服务
    sc delete 服务ID

如果启动SVN服务器的时候,不会报错就是正常开启了

这里写图片描述


分配权限

在我们配置库中找到conf文件夹下的svnserve.conf配置文件。将下面的三行的注释去掉

这里写图片描述

分配用户

找到conf文件下的passwd,配置用户

这里写图片描述

常见的子命令

  • import:将未纳入版本控制器的文件或目录提交到版本库中(仅执行一次)
  • checkout: 从版本库标签中出工作副本
  • revert: 将工作副本文件恢复到指定版本
  • update: 将版本库的修改合并到工作副本中
  • commit:把工作副本的修改提交到版本库。

使用SVN

添加数据到SVN

创建配置库,我们可以使用命令行方式,也可以使用UI点击的方式。这里我就直接使用UI的方式了。

这里写图片描述

随后,开启我们的SVN服务

这里写图片描述

把一个文件夹放置到配置库中,交由SVN管理

这里写图片描述

这里写图片描述

在SVN中查看我们添加的内容:

这里写图片描述

查看具体的日志

这里写图片描述

标识得非常清晰:

这里写图片描述


从SVN导出数据

把SVN的数据导出到用户中。

这里写图片描述

导出后:这个local文件夹其实就是我们的工作副本!

这里写图片描述


修改SVN导出后的数据、再添加回SVN

我在工作副本中添加了一个文件

这里写图片描述

添加到SVN中:

这里写图片描述

随后,变成了一个蓝色的图标+号,我们提交。

这里写图片描述

这里写图片描述


解决冲突

我们可能会出现这样的一个问题:我们的SVN是一个团队正在开发。但是在commit之前,有人就把我正在编辑的文件给修改了。于是当我在提交的时候就出现了冲突【当前的数据不一致,冲突了】

localhost2用户导出了SVN的数据,并且修改了文件:

这里写图片描述

另一个用户localhost也在修改该文件,但是它没有做updata操作。并不知道该文件已经被修改了。

这里写图片描述

当他修改完,想要更新到SVN中的时候,发现冲突了。

这里写图片描述

面对冲突,我们有两种方案:

  • 放弃本次的修改
  • 查看冲突的内容是什么,当查看完再决定要哪个的数据,或者是合并起来。

这里写图片描述

我们进去冲突修改的页面,决定要的是哪一行的数据

这里写图片描述

这里写图片描述

最后修改完,点击保存操作就行了。

这里写图片描述


关于冲突的建议

  • 修改文件之前,先进行一次update操作
  • 修改完成后,及时commit,不要在本地停留过长时间
  • 在多位团队成员协作时,尽量修改自己撰写的部分,尽量不要修改不属于自己撰写的部分
  • 出现冲突很正常,可以通过前面的方法解决,不要相互覆盖

工作流程图

这里写图片描述


原文发布于微信公众号 - Java3y(gh_085b56c42174)

原文发表时间:2018-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维一切

SWOOLE之代码热更新实现_持续的思考 转

本人参与的swoole项目有幸被很多朋友使用,我也大力向周边的一些朋友推荐,随着swoole的版本迭代更新,已经足够稳定了,在阿里,腾讯,yy等各大公司都有着使...

1511
来自专栏老安的博客

用微信来一键开关zabbix报警

1574
来自专栏喵了个咪的博客空间

[喵咪MQ(3)]RabbitMQ集群安装配置

[喵咪MQ(3)]RabbitMQ集群安装配置 ? 在各项生产环境使用中,容灾总是一个很重要的话题,如果单点故障会导致整个系统奔溃或者是丢失数据是不是好气好气的...

3706
来自专栏企鹅号快讯

传统的登录系统与单点登录SSO系统

正文共:1783字3图预计阅读时间:5分钟 传统的登录方式 kiri开发了一个项目,这个项目只有一个web工程,所以他在做系统登录的时候呢?是这样做的: ? “...

2806
来自专栏开发之途

用GitHub和Hexo搭建个人博客

1112
来自专栏JAVA同学会

单点登录(SSO)详解

在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。 但随着企业的发展,用到的系统随之增多,...

3.9K5
来自专栏xingoo, 一个梦想做发明家的程序员

Maven那点事儿(Eclipse版)

前言: 由于最近工作学习,总是能碰到Maven的源码。虽然平时工作并不使用Maven,但是为了学习一些源码,还是必须要了解下。这篇文章不是一个全面的Mav...

2199
来自专栏后端技术探索

获取客户端的真实IP(而非代理服务器IP) 的一个实例

在api程序中,某个业务场景需要通过获取用户app的真实ip,因为中间通过代理代理服务器,用 REMOTE_ADDR 头信息肯定获取不到app的ip,从goog...

2661
来自专栏Web项目聚集地

Linux养成计划(二)

这篇文章介绍关于Linux系统的目录结构,比较Linux系统和Windows系统目录结构的区别。我们知道在Linux中一切皆文件,包括它的硬件,声卡、硬盘等等都...

881
来自专栏梦魇小栈

Ubuntu 使用 Cron 实现计划任务

Windows 自带定时执行任务的工具叫做“计划任务”,Linux 下我们使用 Cron 实现这一功能。

2142

扫码关注云+社区

领取腾讯云代金券