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

Ach*_*har 6 version-control mercurial

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

编辑

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

ang*_*son 10

为了增加Tim的答案,一种不同的方式来处理它是如何Mercurial建议你做的,如果你可以,提前计划(我会看看我是否可以沙沙作响.)

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

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

并且由于bugfix需要进入多个分支,因此"某处"必须在您分支的点之前,否则该错误不会出现在两个(/ all)分支中.

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

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

1---2---3---4---5---6---7---8---9---10       default
         \               \
          \               \
           11--------------12--13            stable
Run Code Online (Sandbox Code Playgroud)

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

1---2---3---4---5---6---7---8---9---10--15       default
         \               \             /^-- merge stable into default
          \               \           /
           11--------------12--13----14          stable
                                     ^-- bugfix
Run Code Online (Sandbox Code Playgroud)

但这也将变更集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
Run Code Online (Sandbox Code Playgroud)

有关如何在错误修正方案中使用Mercurial的更多信息,"Mercurial:The Definitive Guide"第9章非常值得一读.


Tim*_*gan 5

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

hg update dev
hg merge stable
Run Code Online (Sandbox Code Playgroud)

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

hg update dev
hg transplant --log <rev>
Run Code Online (Sandbox Code Playgroud)

如果你真的想避免使用扩展,那么你可以使用exportimport:

hg export --rev <rev> > tmp.patch
hg update dev
hg import tmp.patch
Run Code Online (Sandbox Code Playgroud)