在SVN中合并一系列修订与重新合并之间有什么区别?

我已经阅读了一些文档和博客关于合并一系列修订和重新合并之间的区别,但我没有得到一件事。

如果我select一个或其他方式合并分支到主干,合并有什么区别? 为什么合并一些修订版本在某些情况下不起作用,但是成功地重新合并将分支合并到trunk中?

首先,SVN计算应用差异的方式在两种方法中是不同的。 通常情况下,例如,当您从树干到分支以樱桃采摘方式应用X到Y的一系列修订版本时,SVN将计算树干中X到Y版本之间的差异,并将其应用到分支。 你也可以在另一个方向做同样的事情,用这种方法把分支上的变化应用到主干上。

然而,当你将一个分支重新集成到trunk中时,SVN会做一个不同的计算。 SVN只是计算整个分支和中继线之间的差异,而不是计算分支中的X到Y之间的差异,并将这些更改应用到主干上。 假设您一直在努力使树枝保持最新状态,那么树干和树枝之间的重新集成计算的差异就是树枝中尚未完成的所有更改在后备箱里。

从SVN 1.6文档 (重新整合分支机构):

然而,当你的分支合并到主干时,底层的math是完全不同的。 您的function分支现在是重复树干更改和私人分支更改的混杂,所以没有简单的连续范围的修订来复制。 通过指定--reintegrate选项,你可以让Subversion仔细地复制你的分支独有的改变。 (事实上​​,它通过比较最新的树干树与最新的树枝树来实现这一点:所得到的差异正是您的树枝改变!)

我不完全确定(我已经忘记了这些年),但我认为在以前的SVN版本(如1.5之前?),没有合并跟踪和分支重新集成选项,所以如果你想合并一个完整的分支进入主干,你必须手动使用revisions的范围方法来代替。 我试图在文档中查看这个,但是我还没有find关于它的参考。

额外阅读

另请参阅Re:为什么要重新合并svn 1.5? 这个评论指出了这一点 。

当你在一个特性分支上工作并完成时, 重新集成意味着被使用。 下一步应该是删除分支。 在重新合并之前,您应该使用“修订版本”合并目标(通常是主干)到分支合并合并所有合格修订到分支。 这略高于重新合并的段落。

“修订版本”合并的意思是樱桃采摘修改应该去某个分支,例如修复一个稳定版本分支中的bug。

– 重组应该是默认的; 如果真的有什么理由想要做一个与–reintegrat不同的同步合并,他们可以简单地提供一个–sync。 – 重新整合是你几乎所有的时间,除非你想樱桃采摘的情况下。 (这只是我的2美分 – 我不认为自己是一个合并的专家,也不明白为什么他们的同步math将不同于他们的重新计算math) – 当我合并时,我几乎总是想要,只想要的变化源分支,尚未合并到目标分支中…