版本的分支和合并,是版本控制的核心功能。
比如,软件通过版本的分支,将项目分配给多人做分工开发,通过版本合并,将这些分工实现的代码合并到新的版本中;或者,修改代码bug的时候,可以先打出一个版本分支,保留出现bug的版本,比如分支版本名称为pre_fix_bug_2201,这里2201表示bug的代号,然后针对这个分支做修改fix这个bug,再将修改后的内容提交到一个新的分支版本,比如post_fix_bug_2201,再到适当时候将这个分支合并到代码主干中去。
以上说了一下版本分支与合并的用途,这里简单说一下svn版本分支合并的基本原理。
首先是版本分支,实际上是将当前版本“copy”到分支上,非常类似windows下,将某个目录的快捷方式复制到其他路径。这种copy,可以说是轻量级copy或者叫廉价copy,不是复制版本内容,而是做一个内部的引用。这样的copy很快,对服务器也没有空间上的开销。
版本的合并,是svn开发中的难点,当做版本合并的时候,服务器会试图智能的合并同一个文件的不同版本,可能会带来版本冲突,这需要操作者做手工的处理,消除版本冲突。合理分工的项目应该可以通过管理手段尽量避免这种情况。
以下是通过subclipse演示版本分支的操作。首先,项目文档应该已经全部提交,然后,选择
然后,填写url,一般是在tags/目录下:
然后默认选项,next即可,然后选择finish按钮。在svn的相应路径下就会有一个同名的项目。
打分支,实际上就是建立了一个项目的轻量级copy。
如何从版本的一个分支切换到另外一个分支,这也是很重要的,它能帮助你轻松在不同的项目版本中自动切换,而不必在eclipse里维持多个项目。
选择要切换的项目版本路径,或者直接输入亦可。
然后点击ok后,项目即可切换到该版本下。
在分支上做了改动,并且已经提交(一般tags目录下的项目约定是只读的,不建议改动,这里是为了举例方便),那么,可以将这个版本合并到trunk(主干)代码中,让主干也拥有最新的代码。
选择需要合并的源,比如从tags上面一个版本,合并到主干(trunk)代码中。
之后,需要设置一些合并的特性,这里默认配置即可。
执行完毕后,会有一个合并报告,可见没有出现冲突情况。
这时候看源代码,可以发现有改动,这些改动就是合并过来的代码。
改动如果没有问题,就可以提交,这样就完成了一次版本的合并工作。
“还原”已经提交的改动