svn合并(merge)多版本代码

1、  背景    服务器

平时在进行开发时,通常都会有多版本同时进行,包括项目版本、周版本、紧急版本等,当某一个版本具有上线条件后,须要在上一个已发布的版本基础上进行发布,才可以避免出现版本相互覆盖,所以每每须要对版本之间代码进行合并,这里就和你们探讨下如何合并代码,让合并代码质量高以及高效。工具

2、合并代码的常规方法测试

常规的方法是用Beyond Compare 工具来进行手工合并代码,该工具的最主要做用是对比出有哪些代码是不相同,而后人为地判断出哪些须要合并,哪些不须要合并。所以若是判断失误,则合并后的质量未必高;在合并的过程当中,由于是须要人为识别如何来合并,所以效率天然不会很高.编码

3、利用SVN合并spa

Subversion的版本库是一种文件服务器,但不是通常的文件服务器。Subversion版本库的特别之处在于,它会记录每一次改变:每一个文件的改变,甚至是目录树自己的改变,例如文件和目录的添加、删除和从新组织;可见SVN可自动识别出开发者具体修改什么代码,在合并时,只要知道SVN版本号,它会自动找出修改过的代码,而后合并到最终目标文件中。所以使用SVN来合并代码具备合并质量高以及高效的特色。 SVN的合并有三种类型,以下图:日志

第一种类型:合并一个版本范围
该类型是根据SVN指定的版本号来合并,也是最灵活的一种合并方式,能够是主干合并到分支,或分支合并到主干;主要应用场景是把分支或主干里面的一部分修改同步到主干或分支中去;甚至支持不一样库的两个分支,固然这两个分支要求是相同的目录结构。图片

第二中类型:复兴分支
把分支合并到主干上,这里会把全部分支的修改,都合并到主干中,若是只想合并一部分,不合适使用该类型;并且这种类型合并受限的条件比较多,如分支和主干必须是在同一个库,本地工做目录不可以包含有被修改过的文件等。开发

第三种类型:合并两个不一样的树
把两个分支的差别合并到本地的工做目录;其实它也能够把分支的代码同步到主干中,只须要把合并的from指定为主干URLto指定为分支URL, 而本地工做目录是主干。get

4、利用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.提交代码

合并完代码后,最后别忘记提交代码,同时要输入注释,方便往后追溯。注释参考格式以下:从[分支或主干]合并代码到[主干或分支],版本号是从[开始的版本号][结束的版本号]

5、注意事项或建议 

1.在使用SVN进行合并时,如何知道哪些版本号是合并过呢?在查看日志对话框中,已合并过版本号会变成灰色。

2.在修改代码时,建议遵循最小化修改原则,就是在修改代时,不要随意增长空格、空行和格式化、甚至包括文件的编码,有助于方便合并代码。

3.图片没法进行自动合并,但可利用SVN自带的图片对比工具来对比。

4.建议合并时,使用“test merge”来查看有多少冲突,若是冲突较多,可分屡次合并,减小合并的复杂性。