svn中分支开发实践学习

| 2012年3月26日

从去年年中开始,在公司就一直是团队开发作战,代码也是使用svn管理,虽然事用svn管理,但是一直只是把svn作为简单的代码仓库来使用,并没有使用svn的其它功能,所有的人都在master上作修改提交,所以代码的管理十分混乱,上线不好做版本发布包,因为我可能提交了多次,中间其同学也提交了n次,导致最后版本发布包制作极为麻烦。

我自己的一些开源代码基本是用git来管理的,git中我使用了分支开发的方式,虽然只有我一个人开发,有时候也收到有些网友的patch,但是主要还是我一个人开发,即便如此,我还是使用了分支开发的方式,我感觉分支开发的方式很清晰,我在分支上作开发,开发完成之后再合并如master,让后提交master,因为git的版本管理事分布式的,本地就是版本仓库,这样的管理方式对于我来说十分的实用。

但是公司使用svn来管理代码,而且很多同学也都没有用过git,所以现在只能是使用svn。我又想引入branch的开发方式,当然svn是支持branch的,但是我感觉,svn支持的branch太原始了,是以直接文件拷贝的形式来实现的,merge的时候也是对两个文件夹操作,这样你的代码管理就需要多一个原来代码的copy,而不像git一样只需要在同一个文件夹就可以完成所有branch的管理。

不管怎么样,还得用svn,所以这里就简单实践了一下svn的分支开发方式,也作了一个简单的记录,以我的小项目xcut为例子。

首先check代码库:

svn checkout https://xcut.googlecode.com/svn/ xcut

helight@debian:~/data/code$ cd xcut/
helight@debian:~/data/code/xcut$ ls
branches  tags  trunk  wiki

主分支是trunk,创建的分支我这里放在了branches,当然你也可以放到当前这个目录下的任意文件夹。

然后创建分支:

helight@debian:~/data/code/xcut$ svn copy trunk branches/newxcut
A         branches/newxcut
helight@debian:~/data/code/xcut$ svn status
A  +    branches/newxcut
helight@debian:~/data/code/xcut$ svn commit -m "create new branch" ./*
Adding         branches/newxcut

Committed revision 12.
helight@debian:~/data/code/xcut$ cd branches/
newxcut/ .svn/
helight@debian:~/data/code/xcut$ cd branches/newxcut/
helight@debian:~/data/code/xcut/branches/newxcut$ ls
xcut-0.01  xcut-test

然后在这个分支下面做修改并提交svn服务器

helight@debian:~/data/code/xcut/branches/newxcut/xcut-test$ svn commit -m "fix return on main" ./*
Sending        hash_unittest.c
Transmitting file data .
Committed revision 13.

这个时候这个分支上的代码和主分支上的代码就不一样了,如果这个时候是我们完成了该分支上的特性开发,那我们需要提测了,怎么办呢?

这里我们先要把主分支上的代码合并到我们这个分支(如果主分支有修改),然后进行提测,提测完成之后再将该分支的代码merge到主分支。

helight@debian:~/data/code/xcut/branches/newxcut$ svn merge -r 14:15 /data/code/xcut/trunk/
Conflict discovered in 'xcut-0.01/README'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: p
--- Merging r15 into 'xcut-0.01':
C    xcut-0.01/README
Summary of conflicts:
Text conflicts: 1

这里如果主分支和当前分支修改了代码中的同一个文件,比如这里都修改了’xcut-0.01/README’这个文件,那么就会产生冲突,关于冲突的解决这里也很简单,这里选择自己习惯的操作即可。解决冲突可以使用svn resolved,或者直接下冲突时选择使用谁的版本。

之后当前版本事最新的版本,就可以提测了,提测完毕之后没有问题,那么现在就需要把当前版本merge到主分支中,做法是,先切换到主分支目录,然后执行merge:

helight@debian:/data/code/xcut/trunk$ svn merge -r 15:17 /data/code/xcut/branches/newxcut/
--- Merging r16 through r17 into '.':
U    xcut-0.01/AUTHORS
U   xcut-0.01
helight@debian:/data/code/xcut/trunk$

这个时候主分支也是最新的版本了,相当于完成了一次迭代。

在团队作战中分支开发,是避免代码管理混乱最有效的办法。

看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务