时,在开发中,共通的部分修改后,其它人要保持同步。html
这种状况反应到SVN的分支/合并功能上,再贴切不过了。svn
SVN能够为一个版本库中的内容(主干)创建一个分支.分支和主干彻底独立,就至关于把代码再复制一份,从新添加到版本库中。但SVN提供另外一个功能,就是把主干作出的修改合并到分支中,以及把分支修改的内容合并到主干中。固然,咱们也能够把主干的版本库的路径切换到分支上,而后更新,来实现把分支的修改更新到主干;以及修改分支路径来同步主干的修改。但过程复杂,还容易出错。单元测试
SVN 的分支功能还提供一些合并的测试,能够在不改动版本路径的状况下完成上面的需求。测试
示例:ui
1.将一个整项目建一个分支.url
创建时要注意:3d
1.当前复制源,即专业术语中的 "主干(truck)"日志
2.分支存放的位置. 固然,分支也是在SVN版本库中.htm
3.写上日志.这个你们应该懂的.blog
4.是否把主干的路径切换到分支.若是勾选了,创建分支后,在主干里作出的修改并提交后,更新会提交到分支上。主干的版本源内容不会变.
这时咱们看一下 trunk 目录的属性,能够看到它的路径已经变成: /calc/branches/my-calc-branch 了。
为了不产生困惑。以及失误。在创建的时候不要勾上 "切换到分支" 的选项。若是勾上了,咱们仍是切换回去:
注意:
1.主干的目录
2.版本库源路径
这时你即可以在 /calc/branches/my-calc-branch 分支上开发新的功能,且不会影响到其余成员开发或维护主干的内容。
2.合并主干的变动
也许过了一段时间,本来的 /calc/trunk 主干可能已经有其余成员陆续修正了一些 Bugs,但这时你的分支 /calc/branches/my-calc-branch 就能够直接套用主干 ( /calc/trunk ) 的更新,除了避免重复的工做外 ,也能够避免版本的冲突,由于多人改一样的文件可能发生冲突。
常常將 开发主干 ( /calc/trunk ) 的变动透过 svn merge 合并至 分支 ( /calc/branches/my-calc-branch ) 是一个很是好的习惯,这样才不会让你脱离主干(trunk) 太久而致使将分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 时发生许多冲突。
从主干 ( /calc/trunk ) 合并至分支 ( /calc/branches/my-calc-branch ) 一般选第 1 个,也就是 [Merge a range of revisions]
注意.咱们是在分支上使用的 Merge 功能.由于是要在分支上应用主干的更新.
在 Merge 的窗口有如下注意事項:
1.合并的来源,因为咱们打算从主干 ( /calc/trunk ) 合并至分支 ( /calc/branches/my-calc-branch ),因此合并的來源要选 /calc/trunk 才对!
2.合并的结果会直接与目前「工做目录」(Working Copy) 作比对,并修改目前工做目录中的全部文件。所以建议在作合并以前能够将全部还没有 commit 的档案先 commit 到版本库,避免没必要要的冲突事件发生。
在正式进行合并(Merge)以前,建议先执行 Test merge 看看是否会发生什么事!
若无异状则可直接按下 [Merge] 按钮进行合并动做,这时从 主干 ( /calc/trunk ) 分支出来的到目前工做目录的版本就会作个比较,而后直接套用变动到你现有的文件、目录或属性里。
在合并以后若是没有发生冲突,不表明真的没冲突,因此必须再次对原始码作出验证后才能 commit 进版本库,建议可参考如下流程:
1.将项目进行建置(Build)
2.若是没问题再对项目进行单元测试(Unit Testing)或手动测试(Manual Testing)
3.若是都没问题再 commit 目前合并没有误的版本到版本库!
3.合并分支到主干
最后咱们的 my-calc-branch 分支已经将新功能开发完成且测试无误,因此要将 分支 ( /calc/branches/my-calc-branch ) 的最终版本合并回 主干 ( /calc/trunk ),这时的手续以下:
从 分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 一般选第 2 个,而特别选择 [Reintegrate a branch] 这个选项是很重要的,由于这有如下好处:
1.让 Subversion 能知道 主干 ( /calc/trunk ) 是从哪一个分支、哪些版本合并进来的
2.有效节省 Subversion Repository (SVN储存库) 的空间,由于不用重复储存分支的全部变动信息
3.能够产生 Revision graph 得知项目开发的分支情况
同样能够先 测试合并(Test merge) 再正式进行 合并(Merge)
4.删除使用完毕的分支
当 分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 并 commit 了以后,该分支就没用了,该分支若是将来再也不更新或继续开发,Subversion 也不会继续追踪这个分支的变动 (由于以前已经 Reintegrate 过了),建议将该分支删除。