mercurial:将一个错误修正从稳定的命名分支应用到dev分支

时间:2011-08-23 18:45:41

标签: version-control mercurial

我的回购中有这两个命名的分支。稳定和开发。我的问题是如何将一个在stable中更改的bug修补程序复制到dev分支?我真的想在框架内这样做,而不是任何扩展:)

修改

我为这个问题设置了赏金,因为我真的想要解决方案。有一个很好的解决方案,但中途离开。所以我别无选择。它现在似乎得到了回答。但是我会在另一天让问题公平,以防有人有更好的解决方案。希望有道理。 :)

3 个答案:

答案 0 :(得分:10)

要扩充Tim's answer,另一种接近它的方法是Mercurial建议您如果可以的话,提前做好计划(我会看看是否可以勾勒出一个链接。)

计划是,如果您知道错误修正/更改必须进入多个分支,您不会将该变更集提交到其中一个地方开始,而是在其他地方执行。

由于您正在修复项目历史中某处的错误,因此引入了该错误。

由于bugfix需要进入多个分支,因此“某处”必须在分支点之前,否则错误不会出现在两个(/ all)分支中。

因此,推荐的方法是修复引入错误的方法,然后将该更改集合并到需要它的每个分支中。

让我们看一个示例,我们有defaultstable分支:

1---2---3---4---5---6---7---8---9---10       default
         \               \
          \               \
           11--------------12--13            stable

然后您发现变更集2引入了一个错误,并且错误修复需要同时应用于defaultstable。你在问题中描述它的方式,看起来你会这样做:

1---2---3---4---5---6---7---8---9---10--15       default
         \               \             /^-- merge stable into default
          \               \           /
           11--------------12--13----14          stable
                                     ^-- bugfix

但是这也会将变更集13合并到default中。如果您不希望这种情况发生,您可以这样做:

       v-- bugfix
       14--------------------------+--+
      /                            |   \
     /                             |    \
1---2---3---4---5---6---7---8---9--x-10--15       default
         \               \         |     ^-- merge 14 into default
          \               \        |
           11--------------12--13--16             stable
                                   ^-- merge 14 into stable

有关如何在错误修正方案中使用Mercurial的更多信息,9th Chapter of 'Mercurial: The Definitive Guide'非常值得一读。

答案 1 :(得分:5)

如果您的dev分支是“稳定命名分支”的后代,那么您可以简单地

hg update dev
hg merge stable

如果这不可行,那么最自然的答案是transplant extension。此扩展程序随Mercurial一起发布,因此您只需向mercurial.ini.hgrc添加一行即可启用它。启用它后,您可以:

hg update dev
hg transplant --log <rev>

如果确实想要避免使用扩展程序,那么您可以使用exportimport

hg export --rev <rev> > tmp.patch
hg update dev
hg import tmp.patch

答案 2 :(得分:0)

Transplant extension很好地完成了这个诀窍 - 正是你想要的