Mercurial:跨版本合并/大量采摘樱桃

时间:2014-05-29 12:30:21

标签: version-control merge mercurial cherry-pick

情况

我们有两个版本(1.0和2.0)的项目都是积极维护的。它基本上是同一个项目(就变化而言),但基于不同的基本版本(base1.0和base2.0)。 1.0中更改的所有内容也必须移植到2.0。 base1.0和base2.0也是如此。

在mercurial中,我们有4个分支: base1.0 1.0 base2.0 2.0 。像这样:

                         __2.0
             __base2.0__/
            /
__base1.0__/___1.0____________

现在,每当我们更改基本版本中的某些内容时,我们会在 base1.0 中进行更改并执行hg合并到 base2.0 。这里没问题。

现在,当我们为 1.0 执行相同操作并希望将它们合并到 2.0 时,我们还必须重新合并整个 base1.0 分支到 2.0 ,虽然已经完成了从 base1.0 创建 base2.0

问题

解决此问题的最有效方法是什么?我有几个方法:

  1. 合并:如上所述,这会导致很多开销和工作重新完成已经完成的工作
  2. 移植 aka cherry-pick:选择我们在 1.0 上进行的每一项更改,并使用hg graft将其移至 2.0 。虽然它在某些情况下确实有效,但它会创建重复的更改集,因为它以1:1的方式将它们移植。我想要的是1次提交,其中包含 1.0 上移植到 2.0 的所有更新。
  3. 差异导出:我还尝试在原始 1.0 和最近的 1.0 之间导出差异,然后将其导入到的 2.0 即可。但它是一个补丁,补丁是邪恶的。并不是很方便处理。
  4. 有什么想法吗?作为整个SCM概念的新手,我只想听听其他人在这种情况下所做的事情。感谢。

1 个答案:

答案 0 :(得分:0)

我实际上解决了我的问题。我会将其添加为答案,也许其他人认为它很有用。

我真正需要的是挑选从 1.0 2.0 的所有更改。 hg graft做得非常好,但是对于每个变更集都会在 2.0 上创建一个额外的提交并使我的图形混乱。

所以我做的是创建我的repo的克隆,然后使用hg移植从 1.0 移植到 2.0 的所有变更集。然后我输出了预移植和移植后的差异,并将差异作为补丁导入到原始回购中。

基本上是累积的“贪污”,没有关于它来自何处的任何信息。在这种情况下,这正是我需要和为我工作的。