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

oob*_*oob 11 version-control mercurial branch cherry-pick

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

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

Mar*_*ler 14

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

Graft:Mercurial 2.0中的新功能

这个版本引入了移植命令,它可以以智能方式向后端移动."智能"是它将在内部使用合并,这意味着你得到

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

  • 三向合并:嫁接涉及扭曲图形并在该临时图形中合并.三向合并的优点是您可以使用常规图形合并工具来解决冲突.

要将小费复制defaultold-branch您身上,只需运行即可

$ hg update old-branch
$ hg graft default
Run Code Online (Sandbox Code Playgroud)

移植:旧版本

在我们接受移植命令之前,移植扩展是要走的路.这个简单的扩展将导出变更集作为补丁,并尝试将补丁应用到其他修订版本.

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

使用移植很简单:

$ hg update old-branch
$ hg transplant default
Run Code Online (Sandbox Code Playgroud)

这非常接近于运行

$ hg update old-branch
$ hg export default | hg import -
Run Code Online (Sandbox Code Playgroud)

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