【问题标题】:Subversion, Merging颠覆、融合
【发布时间】:2011-09-11 04:14:56
【问题描述】:

首先让我先说一下,我以前在这里问过类似的问题,但从未得到解决我缺乏知识/问题的好答案。

首先,让我从一个分支策略提案开始。这就是我们在工作中所做的,我很高兴听到 cmets 不然,以及为什么这很糟糕。但请理解它通常对我们有用。

我们有 1 个产品。为了这个例子,我们称它为“PRODUCT”。我们运行 2 个并发开发周期。每周维护周期,我们修复非紧迫的错误,以及每两周一次的冲刺。从主干创建了 2 个分支,分别称为“Sprint”和“Maintenance”(我知道的名称选择令人震惊!)。此外,对于紧急/阻塞问题,直接在主干中进行修复并在测试后推送到生产环境。

当我尝试将 sprint 或维护重新集成回主干时,10 次中有 9 次会遇到大量冲突。在甚至从未在其中一个分支中处理过的文件上。这会导致大量手动合并,这很糟糕,而且往往会导致更多问题。

所以我会发出命令:svn merge --reintegrate http://repo/Sprint 虽然有些文件会更新,但我会在完全相同的文件上发生冲突(通过 WinMerge)。我不知道是什么导致了这些冲突。

我怎样才能停止这些荒谬的冲突?

【问题讨论】:

  • 如果没有一个特定示例的一系列 SVN 命令和导致此问题的相应编辑,这将很难诊断...
  • 另外,这可能是行尾问题吗?行尾的变化很可能在您的视觉差异工具中不可见。

标签: svn merge branching-and-merging


【解决方案1】:

您可能会发现 Timpani Software 的 MergeMagician 项目很有趣。它是一个与 Subversion(以及 Microsoft TFS)一起使用的分支管理和自动合并解决方案。您在分支之间创建发布/订阅关系,然后服务器自动进行合并。

MM 促进的频繁合并将减少合并冲突的发生,当它们确实发生时,MM 提供了一种基于 Web 的机制来解决它们。

仅供参考,它是一种商业工具。我听说过的唯一一个能做到这一点的开源工具是 Merge Fairy,但我不认为 Merge Fairy 的开发非常活跃。

查看http://www.timpanisoftware.com

【讨论】:

    【解决方案2】:

    您可能只需要从主干合并回您的分支,而不是创建新的分支......像这样:

    后备箱 --- 创建 Sprint

    --- 将 Sprint 合并到主干 --- 将 Trunk 合并到 Sprint 中

    【讨论】:

      【解决方案3】:

      一个答案是使用许多小的特性分支,而不是两个固定的分支。您的问题是固定分支的更改被合并,然后您对固定分支进行更多更改,这些更改似乎与第一次合并冲突,即使它们确实没有。

      所以要么使用许多小的功能分支,要么切换到像 Mercurial 或 git 这样的 DVCS,它以比 SVN 目前更智能的方式处理合并。

      【讨论】:

      • 不幸的是,由于我们使用的是 Atlassian studio,所以我们一直坚持使用 SVN。
      • @llaskin 好的,所以使用功能分支。 SVN 实际上是一个非常可靠的 VCS - 您应该尝试使用原始 rcs、SCCP 或 pvcs,仅举三个过去的可怕 VCS。
      • 好的。所以每个分支都从树干上分支出来?或者我应该保留 sprint 和 maint 分支,并分支 sprint/maint 分支以创建功能分支?无论我走哪条路,我都可以很快看到这变得非常复杂。
      • 如果分支很小,这并不复杂——一个特性分支可能只使用几个小时。但我可能不是最好的建议人,因为我怀疑你不是在运行 C++ 应用程序商店。
      • @llaskin:一旦你这样做了svn merge --reintegrate,你已经合并的分支不应该再被使用,因为你不能再从它进行自动重新集成合并。见svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html
      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      相关资源
      最近更新 更多