【问题标题】:Conflicts when merging into branch some changes in deleted code合并到分支时的冲突已删除代码中的某些更改
【发布时间】:2010-12-07 23:16:50
【问题描述】:

我们最近创建了一个分支,其中包含为某个客户定制的代码版本。我们同时在两个分支上工作,将“通用”更改提交到主干,然后将它们合并到分支。

最近,我们遇到了一个麻烦的情况。在trunk/bar.c 中,我们(除其他外)有一个foo() 函数。现在,在branch/bar.c 中,该功能已被删除,因为它在那里没有用处。在trunk 中修改foo() 时会出现问题。当我们将更改合并到分支中时(“合并修订范围”),TortoiseSVN“三向合并”工具在方法上显示冲突(这很烦人,但我可以看到一些原因),但它也确实在文件中显示了整个 许多其他更改 - 这似乎是凭空出现的(看起来有点像要显示在树干和分支)。这使得合并变得更加困难,因为它充满了一些不重要的旧变化。

你有遇到过这样的情况吗?您有什么建议,尤其是在合并过程中更容易发现重要差异?

作为一个(希望是)临时解决方案,我将尝试 #ifdef 删除已删除的区域,以便 SVN 认为代码仍然存在并且有更好的时间进行合并。 (不幸的是,这会使代码有点难看,并且在删除更多功能时会变得更难看。)

【问题讨论】:

  • 我赞成,因为我有类似的问题
  • 您使用的是哪个版本(客户端和服务器)? 1.4? 1.5? ...

标签: svn merge branch


【解决方案1】:

你可以考虑

  1. 您的提交是否足够频繁,以及
  2. 您是否正在合并正确的修订版或修订版范围。

在我看来,您的修订没有达到您想要的粒度;也就是说,一个修订包含许多变化。要么,要么你试图合并比你需要的更广泛的修订。无论如何,如果您更频繁地提交,它可能会有所帮助。

对于这种特殊情况,您必须手动合并文件 — 完成后,您应该能够在没有任何干预的情况下合并不涉及 foo() 的后续修订。

【讨论】:

  • (1) 是的; (2) 是的。如果我只是在已删除的 foo() 函数的主体中更改一些随机行,就会出现问题。我已经和我的同事仔细检查了基本步骤。
【解决方案2】:

好吧,我不是 SVN 专家,但我可以建议您从第一个分支的提交中导出一个补丁,然后将该补丁应用到第二个分支。

我猜这几乎就是 Mercurial 的“hg 移植 XXX”命令的作用。不过,我不知道是否存在任何 SVN 等效命令。

【讨论】:

    【解决方案3】:

    如果您更改了已在分支上删除的主干上的功能,则可能会发生冲突,这是很自然的。

    是的,对于“右侧”,您将看到主干和分支之间的所有变化。如果你仔细想想,这是唯一符合逻辑的变化。 (至少,服务器上的 1.4 版本就是这种情况;具有更好合并跟踪的更高版本可能会更简洁,但您需要有足够的客户端版本,我不确定。我真的需要升级...叹息。)但是显示的分支更改都应该被合并自动标记为未修改,除非它们与主干的更改发生冲突或以其他方式交互。

    您永远不会对您看到的一系列变化感到惊讶。如果是,那么您要么选择了错误的修订版,要么误解了合并过程的工作原理。

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 2014-02-14
      • 2013-10-24
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多