1、Merge a range of revisions(合并一个范围的版本)
此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。
合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的 所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那 个版本的修改,之前或之后的修改将不被采纳。
2、Reintegrate a branch(复兴合并)
复兴合并可以理解为是第一种合并类型的一种特例,在复兴合并中,主干可以理解为是自从开创分支之后没有任何修改,而分支是经过修改的,而且合并中分支是没 有版本选择的。经过复兴合并,分支中所有的修改都会合并到主干中,合并的结果将使得分支和主干一模一样,从而可以删除分支。
3、Merge two different trees(合并两个不同的树)
此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;第二种类型是主干和分支都不能选择合并的版本;而这种类型则是无论是主干 还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本 有不同的地方,合并时主干部分将被放弃。
起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)
结束URL:选择要合并的分支的URL。
起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。
利用SVN合并具体步骤
合并一个版本范围
该类型是根据SVN指定的版本号来合并,也是最灵活的一种合并方式,可以是主干合并到分支,或分支合并到主干;主要应用场景是把分支或主干里面的一部分修改同步到主干或分支中去;甚至支持不同库的两个分支,当然这两个分支要求是相同的目录结构。
1.把主干check out到本地,并确保文件更新到最新状态
2.按照下图示打开合并对话框:
3.选择合并类型:
根据合并类型进行选择,这里的例子中是选择第一个类型,然后再点“Next”按钮。
4.填写SVN URL和版本号信息:
“URL to merge from”下拉框选择需要合并分支或主干,在例子中,选择的是分支v1.0;在“revision range to merge”文本框选择具体需要合并的SVN版本号,可通过“show log”按钮查看有哪些版本号。可选择具体的版本号,也可以选择一个区间的版本号,如4-7,表示从SVN版本号4-7的全部合并。如选择区间版本号,需按住shift键。输入各项信息后,再点“next”。
5.合并选项的选择
在这个步骤中,主要是针对检索深度、行的结束符、空格选项的合并做设置,这里选择默认选项即可。
6.测试合并
在上面步骤中,直接点“test merge”按钮来测试合并结果。如果有冲突,则会有提示有冲突:
7.开始合并
在步骤6中,直接点击“merge”按钮将会开始合并,如没有冲突时,合并后的对话框将是下面的截图:
8.处理冲突
合并后有冲突时,弹出的对话框如下图,注意此时“resolved”按钮是灰色:
点“edit conflict”按钮,将打开SVN的合并对话框,让开发者进行手工合并:
通过手工合并后,合并后的代码将在下面窗口中显示,确认合并完毕,点工具栏上的第二个保存图标进行保存,并关闭当前合并的对话框;回到处理冲突的对话框中,会发现之前“resolved”按钮是灰色,现在变成可点按钮:
点“resolved”按钮,至此,当前的冲突已解决;SVN会继续合并后面的版本。
9.提交代码
合并完代码后,最后别忘记提交代码,同时要输入注释,方便日后追溯。注释参考格式如下:从[分支或主干]合并代码到[主干或分支],版本号是从[开始的版本号]到[结束的版本号];
五、注意事项或建议
1.在使用SVN进行合并时,如何知道哪些版本号是合并过呢?在查看日志对话框中,已合并过版本号会变成灰色。
2.在修改代码时,建议遵循最小化修改原则,就是在修改代时,不要随意增加空格、空行和格式化、甚至包括文件的编码,有助于方便合并代码。
3.图片无法进行自动合并,但可利用SVN自带的图片对比工具来对比。
4.建议合并时,使用“test merge”来查看有多少冲突,如果冲突较多,可分多次合并,减少合并的复杂性。
参考资料:如何利用SVN合并代码