彻底掌握版本控制:svn

96
08_carmelo
2017.08.07 22:18* 字数 944

前言

工作中一直在svn客户端update和commit,对svn其他操作比如:分支,合并,Tag等一般是开发老大来负责,总是有点没有彻底弄清,而这些才是版本管理的核心,版本管理作为开发的一部分还是很有必要掌握的。最好的学习办法就是自己搭建一个svn服务器,测试一下便知。

1.安装TortoiseSVN客户端
2.安装Visual SVN Server服务端,新建代码仓库测试SVN

配置Visual SVN Server

  1. 参照http://www.jianshu.com/p/fc8443a9aafe
    建立代码仓库repo24,里面两个文件夹trunk和branch。配置username和密码(分配给每个开发),group(暂无作用)
image.png
  1. 在本地建立空文件夹dml_trunk,直接checkout,地址用刚刚建立的仓库下的trunk:
    http://dev-dengml.luban.com/svn/repo24/trunk

  2. 在dml_trunk我建立一个Android项目,然后add,然后commit,看下svn server:代码成功提交了

image.png

测试几个操作:

代码回滚

比如我现在要回滚到新建项目:

image.png

右键》revert to this revision,操作后本地代码就变了,然后commit即可。

建立Tag

作用:每次正式发版比如1.0 ,1.2, 2.0等,都要备份代码,方便以后直接获取某个版本的源码,主要要在svn server上设置只读属性

  1. 假设现在1.0版本已经发版,需要打tag备份代码 trunk1.0,在发版的version右键》create branch/tag this reversion:选择svn server上的路径,这里我在branch下新建一个1.0,选择 head revision in the repository
image.png
  1. 这样svn server就会多出1.0文件夹,里面的代码和trunk一模一样,然后本地建立dml_branch文件夹,checkout一下:
image.png

建立分支

参考:http://blog.jobbole.com/106868/

作用:比如1.0已经发版了,现在正在trunk上开发1.2的项目,突然有紧急bug需要修复,那么之前建立的1.0 tag就发挥作用了,直接拉取一个分支1.0_sp1,把这个svn路径告诉开发人员,在这上面改bug提交发版,这个版本一般命名为1.0.1,并且要再次打一个tag.

建立分支步骤和上面打tag操作一模一样,只不过path不一样,比如是branch/1.0_sp1,完成后看下svn server有三个文件夹:对应3个svn路径

  • trunk:代码主干,正在开发1.2
  • branch/1.0:1.0版本的tag,只读
  • branch/1.0_sp1:1.0的分支,紧急改bug
image.png

合并分支到主干,解决冲突

现在紧急bug改完了,如果1.0_sp1不需要了,那么把这些代码合并到trunk:到本地trunk目录右键merge》merge a range of versions》填写分支路径,其他默认》一路Next。
这里我制造一个冲突:1.0_sp1和trunk改动了同一份文件setting.gradle的同一行代码。合并提示报错,有冲突:

image.png

我准备手动解决冲突,点击Edit conflict,进入冲突解决界面,可以看出14行冲突了

image.png

解决冲突的办法很简单,二选一:分支 or 主干,这里我用分支代码覆盖主干,在14行右键use this text block,然后save关闭当前窗口,到之前的提示界面点击Resolved。成功解决冲突,然后提交代码,这样分支代码成功合并到主干了。

Android经验分享
Web note ad 1