一、  背景    

平时在进行开发时,一般都会有多版本同时进行,包括项目版本、周版本、紧急版本等,当某一个版本具备上线条件后,需要在上一个已发布的版本基础上进行发布,才能够避免出现版本相互覆盖,因此往往需要对版本之间代码进行合并,这里就和大家探讨下如何合并代码,让合并代码质量高以及高效。

二、合并代码的常规方法

常规的方法是用Beyond Compare 工具来进行手工合并代码,该工具的最主要作用是对比出有哪些代码是不相同,然后人为地判断出哪些需要合并,哪些不需要合并。因此如果判断失误,则合并后的质量未必高;在合并的过程中,因为是需要人为识别如何来合并,因此效率自然不会很高.

三、利用SVN合并

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

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

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

第三种类型:合并两个不同的树 把两个分支的差异合并到本地的工作目录;其实它也可以把分支的代码同步到主干中,只需要把合并的from指定为主干URL,to指定为分支URL, 而本地工作目录是主干。

四、利用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合并代码的更多相关文章

  1. SVN合并代码

    分之合并主干代码, 修改冲突后提交, 更新本地代码, 主干合并分之,

  2. SVN建立分支和合并代码

    1.SVN建立分支正确SVN服务器上会有两个目录:trunk和branches.trunk目录下面代码就是所谓的主版本,而branches文件夹主要是用来放置分支版本.分支版本是依赖于主版本的,因此建 ...

  3. SVN 分支代码合并到主线

    SVN 分支代码合并到主线 步骤一安装TortoiseSVN 客户端,在本地 checkout主线代码 步骤二:创建branches分支 步骤三.branches修改提交代码 步骤四:分支代码合并到主 ...

  4. 利用SVN工具下载OpenCore代码

    OpenCore原来使用的是CVS管理代码的.从09年起,更换用SVN管理代码,大家可以用TortoiseSVN软件下载代码,网址是:http://tortoisesvn.net/,安装后tortoi ...

  5. SVN提交代码的规范

       协同开发中SVN的使用规范 先更新,再提交 SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 如果在修改的期间别人也更改了svn的对应文件, ...

  6. php利用svn hooks将程序自动发布到测试环境

    利用svn hooks将php程序自动发布到测试环境 复制仓库hooks目录下的post-commit.tmpl为post-commit cp post-commit.tmpl post-commit ...

  7. 如何利用svn自动同步更新到网站服务器

    我们最终的目的是:当本地提交后,SVN服务器自动更新服务器端指定WEB目录内的文件 实现方法: 找到服务器端 SVN版本库所在的目录(目录名称是Repositories),这个目录是在安装Visual ...

  8. 微信开发之SVN提交代码与FTP同步到apache的根目录

    SVN是协同开发的,版本控制器,就是几个人同时开发,可以提交代码到SVN服务器,这样就可以协同开发,一般是早上上班首先更新下代码,然后自己修改代码 工作一天之后,修改代码之后,下班之前,更新代码,然后 ...

  9. 利用svn的补丁文件打包生成增量文件

    下面的代码是maven版本 1. 创建patch.txt增量文件 保存到 文件目录下 比如 E:\aa\patch.txt 2. 编写java代码 package utils; import java ...

随机推荐

  1. 转:如何学习SQL(第一部分:SQL基础)

    转自:http://blog.163.com/mig3719@126/blog/static/285720652010950712271/ 1. 为什么学习SQL 自人类社会形成之日起,社会的运转就在 ...

  2. hiho_1044 状态压缩

    题目大意 给定N个位置,每个位置i都有一个value[i]值,从中选择若干个位置,使得连续的M个位置中的被选中的位置数目不超过Q,求出所有选择方案中value和最大的方案,输出其最大value和. 分 ...

  3. Unix domain sockets

    #server: SERVER_PATH = "/tmp/python_unix_socket_server" def run_unix_domain_socket_server( ...

  4. 配置NGReport 报告中文

    1. 测试报告的名称 在测试开始或测试监听器的类中加上下面一句代码即可: System.setProperty("org.uncommons.reportng.title", &q ...

  5. linux gcc 编译动态类库(.so)和静态类库(.a)

    linux gcc 编译动态类库(.so)和静态类库(.a) 我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h vo ...

  6. svn 大杂烩

    svn : trunk 日常开发 branch 多版开发,或者修复bug,测试 tag  开发到一阶段打一个tag,给外部使用 属性externals:可以引用外部的公共工程.这个工程最好是稳定的,不 ...

  7. js时间显示设置

    //对日期中部分小于10的数字前边添加0 function zero(s){ return s < 10 ? '0' + s: s; } var date=new Date(), year = ...

  8. ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误

    发布ArcMap服务时,由于矢量图中包含“文本标注”. 发布矢量图服务时,报了一个“00017: 数据框中至少有一个包含图形的已启用注记组”的错误,如下图: 官网给出的解决办法如下:http://re ...

  9. ubuntu14.04LS中安装sogouPingyin

    简介: 安装了新版本的ubuntu我才发现itbus的拼音是双拼的  没法改变 所以就安装了搜狗拼音 , 好像这个和小企鹅输入法有点关系 首先: 在终端中输入: sudo add-apt-reposi ...

  10. hdu----(5056)Boring count(贪心)

    Boring count Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...