乌龟 SVN 合并两个分支

18
我正在尝试使用Tortoise SVN合并两个分支。 自它们分开以来,两个分支都已发生更改。 如果我合并它们,只会获取其中一个的更改,并覆盖另一个的更改。 但是我想要每个文件的最新更改(我们没有在相同的文件中工作)。
我尝试了“合并两个不同的树”选项,并在“From:”和“To:”中输入了两个分支。 我在两个分支上都选择了Head Revision。 我将其他所有设置保留为默认值(合并深度:工作副本,比较空格,其他所有未选中)。

这两个分支有共同的祖先分支/主干吗? - Micha
是的,第一个是主干,而另一个是它的一个分支。 - deetz
将分支合并到主干(分支重新集成)不是“合并两个不同的树”,绝不能是这样。请尝试至少阅读一次svn help merge和TortoiseSVN合并帮助! - Lazy Badger
请查看链接https://dev59.com/VWMl5IYBdhLWcg3winkW中得票最高的答案。我认为那应该足够回答你的问题了。 - user3328402
3个回答

33
在“来自URL”选项中,您应该指定要合并的分支。例如,假设有两个分支,分支A和分支B,并且您想将分支B合并到分支A。在TortoiseSVN中,单击“合并”选项,然后选择“合并两个不同的树”选项。在“来自URL”中,请提及分支A的URL,在“到URL”中,请提及分支B的URL。这样可以将分支B合并到分支A而不会丢失任何文件。参考:在此找到此语句 here

6
那看起来好像反过来了。 - feedbackloop
4
我也这么认为,但在这里发现了这个声明:“在“From:”字段中输入主干的完整文件夹URL。这可能听起来有误,但请记住,主干是你想要添加分支更改的起点。” - Youp Bernoulli

11

在 Subversion 中,合并操作始终是在本地完成的。您要合并的分支应该通过干净的检出进行检出。也就是说,它应该是最新的,并且没有本地更改。然后,您将另一个分支合并到其中并提交您的更改。

合并不是特定分支的副本。合并通常是一种三方操作。您有要合并到的分支(称为 yours ),您要从中合并的分支(称为 theirs )和最后的共同祖先(LCA)。最后一个很重要。

如果在 your 分支上进行了更改,则在合并过程中不会触及该更改。合并算法之所以知道这一点是因为 yours 与LCA之间存在差异。如果LCA和 theirs 之间存在差异,则会考虑到这种更改。

如果我理解正确,您有:

  • 从主干中获取了 branch1
  • branch1 获取了 branch2

您想要合并什么?您是否想将 branch1 branch2 都合并到主干中。如果您通过 Subversion 将 trunk 复制到 branch1 ,并通过 Subversion 将 branch1 复制到 branch2 ,那么应该可以做到这一点。这样,Subversion 就知道这两个分支在历史上是相关的。

如果您创建了分支,则使用 Windows 复制文件并添加文件,则两个分支之间没有历史记录,合并将更加困难。

是否可以将 branch2 的更改合并到 branch1 中?如果可以,我会这样做:

  • 检出 branch2
  • branch1 合并到 branch2 并提交这些更改,branch2 将拥有来自 branch1 的所有更改。
  • 检出 trunk
  • branch2 合并到 trunk。现在,trunk 将具有来自 branch1branch2 的所有更改。

1
"合并两个不同的树"选项在您想要使一个分支与另一个分支完全相同时非常有用。
如果您希望输出分支包含来自两个分支的更改,则应使用"合并一系列修订版本"选项。
使用"合并一系列修订版本"选项的步骤如下: 注意:输出分支是指您想要将更改合并到其中的分支。 而输入分支是指您想要将其更改合并到输出分支中的分支。
  1. 获取一个干净的 输出分支 副本
  2. 打开 TortoiseSVN 合并向导 (TortoiseSVN > Merge),选择 "合并一系列版本" 选项
  3. 在要合并的 URL 字段中输入 输入分支
  4. 在要合并的版本范围字段中,如果要合并 输入分支 的所有版本,则选择 "所有版本"。如果只想合并特定版本,请选择 "特定范围" 并使用 "显示日志" 按钮选择版本。TortoiseSVN 在这方面很聪明,已经合并过的任何版本都会变灰并标有 已合并 图标
  5. 在下一个屏幕上选择合并选项。默认选项已足够好
  6. 使用合并按钮执行合并。如有冲突,将弹出冲突解决对话框
  7. 解决所有冲突后,将更改提交到您的 输出分支

Figure 4.56. The Merge Wizard - Select Revision Range

更多详细信息,请参考TortoiseSVN合并文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接