?
- SVN的合并操作其实是一系列操作的组合:
- 将主干或某个分支上的一组修订(即合并的源头)应用到另一个分支或主干(即合并的目标)的working copy(本地工作拷贝);简单说,合并包括三要素——源头、目标、目标的working copy;
- 如果出现冲突(conflict),需手工解决冲突;
- 最后提交,提交时还要在SVN备注中标明这是一次合并,如merge -r 5645:5650 svn://10.191.17.67/p17_ii/development/sourcecode/Branchs/P17-II/2011-03-17 发布前又有小改动;
- 为何会出现冲突,如何解决:
- 源不仅是个url,还包括一个修订范围,例如前面红字示例中的-r 5645:5660;
- 假设源头包含5646、5648、5650三个修订版,working copy的当前修订版是5649;
- 那么合并时SVN实际进行的操作是:diff 5646 5648,然后apply到working copy;diff 5648 5650,然后apply到working copy;
- 这个过程中,svn也会分别diff 5646 5649,diff 5648 5649,如果这两个diff任何一个与上文的两个diff中的任何一个恰好改了同一行代码,则出现冲突,相应的文件中会用标记分别标明这两种diff差异,同时会生产3个临时文件,分别是.working、.left_r5646、.right_r5650;
- 一般选择手工解决冲突,但如果很对,也可以直接保留.right_r5650作为最终结果,
- 更多内容,详见svnbook。
?