有这样一种场景:
在基线代码还在开发测试早期阶段,拉了一个分支用于开发定制功能,并且最终定制的功能要合并到基线中来。一是基线的代码本身在开发过程中就可能有较多的改动;二是定制不仅新增了功能,还对原来的功能做了修改。刚开始的想法是直接在基线上进行定制功能和基线本身的开发,等基线的代码全部修改好以后再拉定制的分支,以保证定制的分支已经修复了基线的已知缺陷。查阅资料发现SVN的merge功能正好可以比较好地解决这个问题,这里记录一下使用方法。
目录
1. 客户端
1.1 相关菜单
可以看到merge有三种类型:
1.1.1 Merge a range of revesions
这种方式允许我们把对某个代码分支所做的一系列修改施加到另一个代码分支上。
1.1.2 Reintegrate a branch
这种方式允许我们快速将一个branch所做的全部修改合并到本地trunk代码中,典型的使用情景是我们先将trunk最新代码合并到本地branch,然后同步branch到SVN,最后通过reintegrate a branch操作将branch所做的修改合并到trunk,这时branch和trunk就完全一样了,就可以删除这个branch,因为它已经完成了使命。
1.1.3 Merge two different trees
这种方式允许选择两个任意版本的代码,将它们的diff合并到本地代码。
这里有个技巧,在真正执行任何类型的合并前,都点击一下
Test merage
,可以预先看到合并后的效果,如果没有冲突再执行合并,否则可以现在本地代码改好之后再执行。
1.2 基线代码合并到分支
因为分支代码落后于当前基线代码,因此需要将基线代码先合并至分支中去。
- 在本地分支代码上右键,在菜单中选择merge;
- 合并类型选择Merge a range of revesions;
- URL 选择基线代码路径;
- revision range to merge输入框中输入基线的的起止版本号,连续版本用“-”连接,间断版本用“,”连接,也可以点击右侧的show log用鼠标选择相应的版本。需要注意的是起始版本的选择,此场景下,其实版本使用拉取分支时的基线版本,结束版本使用HEAD即可;
1.3 分支代码合并到基线
分支代码合并到基线,如果理解了1.2节的内容,其实是一样的,不同的是三种合并方式都支持,这里不再赘述。
1.4 合并的撤销
在使用客户端时发现只有Merge a range of revesions这种合并方式具有撤销合并功能,具体的操作方法是选中之前合并时选择的SVN代码及相应的版本,勾选“reverse merge”,然后像合并代码那样继续操作即可。
2. 命令行
未完待续…