“backport”的工作流程变为不同的Mercurial(Hg)分支?

时间:2012-04-23 21:18:41

标签: version-control mercurial branch cherry-pick

我们有两个脑袋。一个是我们的主要开发负责人,另一个是我忘记了直到今天。我们发现了一个错误并将其修复到我们的主要开发分支中,我刚刚意识到它应该在旧分支中修复。

我认为在旧分支上进行更改并将其与最新分支合并会更好,但我们并没有这样做。 mercurial可以处理这个吗?我们没有尝试过这样的事情,我无法真正理解它将如何完成。

1 个答案:

答案 0 :(得分:14)

是的,你有两个不错的选择:

Graft:Mercurial 2.0中的新功能

此版本引入了graft command,它可以以智能方式向后端口进行更改。 “智能”是它将在内部使用合并,这意味着你得到

  • 支持重命名:想象一下,您修复了开发分支上文件foo.c中的错误。在较旧的维护分支foo.c中称为bar.c。使用hg graftfoo.c的更改可以正确合并到旧版bar.c

  • 三向合并:嫁接涉及twisting the graph around并合并到该临时图表中。三向合并的优点是您可以使用常规图形合并工具来解决冲突。

要将default的提示复制到old-branch,您只需运行

即可
$ hg update old-branch
$ hg graft default

移植:旧版本

在我们接受移植命令之前,transplant extension是可行的方法。这个简单的扩展将导出一个变更集作为补丁,并尝试将补丁应用到其他一些版本。

因为我们正在处理“哑”补丁,所以不会考虑重命名之类的内容,因为没有三向合并,所以你不会得到你的合并工具的支持。尽管如此,我发现移植在实践中非常有效。

使用移植很简单:

$ hg update old-branch
$ hg transplant default

这非常接近于

$ hg update old-branch
$ hg export default | hg import -

除了移植还添加了一段元数据,这些元数据记录了移植变更集中的原始变更集。这可以用来跳过未来的移植。