0

通常,在将 SVN 分支重新集成到主干时,我们会创建如下历史记录:

trunk   A---B---D---F---H
             \       \ /
branch        C---E---G---X

其中G是合并,H是重新整合合并,X删除特征分支。我还了解到 SVN 用于G和的合并算法存在差异H。到现在为止还挺好。

然而,有一件事困扰着我:这个答案引用了关于重新集成合并会发生什么的 SVN 文档:“事实上,它通过将最新的主干树与最新的分支树进行比较来做到这一点:由此产生的差异正是你的分支更改!”

由于trunc + changes from branch = trunc + (branch - trunk) = branch,我得出结论,重新集成合并后的记录状态始终与分支结束时的记录状态完全相同。

现在考虑这段历史:

trunk   A---B---D---F---H---I
             \        \   /
branch        C---E-----G-----X

根据上面的推理,我假设如果I是重新集成合并,来自提交 H 的更改就会丢失。这是正确的,还是我错过了什么?

4

1 回答 1

1

Subversion 知道最后一个同步修订版是F,因此它计算两者之间的差异trunk@Fbranch@G然后将其应用于工作副本。

如果目标工作副本签出 revision F,那么 reintegrate 将顺利进行(没有冲突),然后您将 wc 更新为H(可能的冲突)并能够提交。

如果目标工作副本签出 revision H,则 reintegrate merge 将在上面执行H(在这种情况下合并期间可能发生冲突)

在任何情况下都不会丢失任何东西。

于 2015-07-22T09:16:15.390 回答