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

时间:2011-07-04 19:21:40

标签: svn

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

如果我选择一种或另一种方式从分支合并到主干,合并有什么区别?为什么合并一系列修订在某些情况下不起作用,但重新集成成功合并分支到主干?

3 个答案:

答案 0 :(得分:36)

首先,SVN计算要应用的差异的方式在两种方法之间是不同的。通常,当您以挑选方式从一个主干到分支应用一系列修订版X到Y时,例如,SVN计算主干中X到Y的修订版之间的差异,并将其应用于分支。您也可以在另一个方向上执行相同的操作,将分支中的更改应用于此方式。

然而,当您将分支重新集成到主干中时,SVN会执行不同的计算。 SVN不是计算分支中的修订版X到Y之间的差异并将这些修改应用到干线,而是仅计算整个分支和干线之间的差异。假设您一直在努力使分支机构与主干中的更改保持同步,那么主干和分支之间的重新集成计算的差异将正是分支中尚未进行的所有更改在后备箱里。

the SVN 1.6 documentation(重新整合分支):

  

将您的分支合并回   然而,主干,底层   数学是完全不同的。您的   功能分支现在是一个混杂的   两个重复的主干变化和   私人分支发生了变化,所以没有   简单的连续修订范围   复制过来。通过指定   --reintegrate选项,你问   颠覆要仔细复制   您的分支所特有的那些更改。 (事实上​​,它是通过这样做的   比较最新的树干树   最新的分支树:由此产生的   差异正是你的分支   变化!)

我不完全确定(这些年来我已经忘记了),但我认为在以前的SVN版本中(比如1.5之前的版本),没有合并跟踪和没有分支重新集成选项,所以如果你想要将已完成的分支合并到主干中,您必须使用修订范围方法手动执行此操作。我试图在文档中查找它,但我还没有找到关于它的参考。

补充阅读

另请参阅Re: Why is --reintegrate needed for svn 1.5 merging?中指出的this comment

答案 1 :(得分:5)

reintegrate意味着在您处理功能分支时使用,并且已完成。下一步应该是删除分支。在重新集成之前,您应该使用“修订范围”合并将目标(通常是主干)合并到分支,以将所有符合条件的修订合并到分支。这在reintegrate段落略高于上面描述。

“修订范围”合并适用于应该转到某个分支的樱桃挑选修订,例如修复稳定版本分支中的错误。

答案 2 :(得分:-1)

- reintegrate应该是默认值;如果确实有任何理由你想要进行与--reintegrat不同的同步合并,他们可以简单地提供--sync。 --reintegrate是你几乎所有时间都想要的,除非你想要樱桃挑选。 (这只是我的2美分 - 我不认为自己是合并专家,也不理解为什么他们的同步数学与他们的重新整合数学不同) - 当我合并时,我几乎总是想要并且只想要改变源分支,尚未合并到目标分支...