【问题标题】:Workflow to "backport" change into different Mercurial (Hg) branch?“向后移植”的工作流程更改为不同的 Mercurial (Hg) 分支?
【发布时间】:2012-05-04 12:47:46
【问题描述】:

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

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

【问题讨论】:

  • 我发现如果“主要开发分支”本身是一棵树,其中不同的更改位于它们自己的(“匿名”)分支中,这些分支会长出然后重新放回...
  • (不是答案,因此是评论)“我认为在旧分支上进行更改会更好”...它可能 更好地将该错误修复应用为“daggy fix”:您回滚到引入错误的位置,提交修复并合并上游。 “尽早”应用它可能甚至比首先应用到你的“旧分支”(不管是什么)更好。对于小错误修复,daggy 修复完全摇滚(恕我直言):mercurial.selenic.com/wiki/DaggyFixes
  • @TacticalCode - 也许这不是一个答案,但我会在未来尝试。

标签: version-control mercurial branch cherry-pick


【解决方案1】:

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

Graft:Mercurial 2.0 中的新功能

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

  • 支持重命名:假设您修复了开发分支上文件foo.c 中的错误。在旧的维护分支中,foo.c 被称为bar.c。使用hg graft,对foo.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 -

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2014-05-02
    相关资源
    最近更新 更多