Ach*_*har 6 version-control mercurial
我的回购中有这两个命名的分支.稳定和开发.我的问题是如何将一个在stable中更改的bug修补程序复制到dev分支?我真的想在框架内做这个,而不是任何扩展:)
编辑
我为这个问题设定了赏金,因为我真的想要解决方案.有一个很好的解决方案,但中途离开.所以我别无选择.它现在似乎得到了回答.但是我会在另一天让问题公平,以防有人有更好的解决方案.希望有道理.:)
ang*_*son 10
为了增加Tim的答案,一种不同的方式来处理它是如何Mercurial建议你做的,如果你可以,提前计划(我会看看我是否可以沙沙作响.)
计划是,如果您知道错误修正/更改必须进入多个分支,那么您不会将该变更集提交到其中一个地方,而是在其他地方执行.
由于您正在修复项目历史中某处的错误,因此引入了该错误.
并且由于bugfix需要进入多个分支,因此"某处"必须在您分支的点之前,否则该错误不会出现在两个(/ all)分支中.
因此,推荐的方法是修复引入错误的位置,然后将该更改集合并到需要它的每个分支中.
让我们看一个例子,我们有default和stable分支:
1---2---3---4---5---6---7---8---9---10 default
\ \
\ \
11--------------12--13 stable
Run Code Online (Sandbox Code Playgroud)
然后你发现变更集2引入了一个bug,并且bugfix需要同时应用于default和stable.你在问题中描述它的方式,看起来你会这样做:
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章非常值得一读.
如果你的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)
如果你真的想避免使用扩展,那么你可以使用export和import:
hg export --rev <rev> > tmp.patch
hg update dev
hg import tmp.patch
Run Code Online (Sandbox Code Playgroud)