【问题标题】:Mercurial Queues: Merging Patches from Multiple RepositoriesMercurial 队列:合并来自多个存储库的补丁
【发布时间】:2011-01-11 20:51:03
【问题描述】:

我在存储库中使用 Mercurial Queues,并将这些补丁放在补丁存储库中。另一位贡献者克隆了我的补丁队列并进行了自己的更改。我现在想将他们的更改合并到我的本地补丁存储库中。

我正在尝试找到一个好的工作流程来执行此合并

  • 在补丁存储库的历史记录中反映贡献者的变更集
  • 在发生冲突时调用用户的合并工具

最初,我只是尝试直接合并补丁。这在非常简单的情况下是可以的,但当很多事情发生变化时就不能很好地工作,因为补丁取决于行号上下文,这似乎不是我应该担心调整自己的事情。总的来说,我发现检查补丁的 3 路差异过于复杂。

有没有更好的办法?

【问题讨论】:

    标签: mercurial patch mq mercurial-queue


    【解决方案1】:

    没有很好的方法来处理这个问题。我最终可能会做的是创建两个克隆,qfinishing 你的补丁在一个中,贡献者补丁在另一个中。那时,您将拥有应用了每个单独补丁的净效果的存储库。然后你 hg pull 将其中一个克隆到另一个,hg merge 将让你使用图形工具来合并补丁的结果——唯一的区别应该是你的补丁的不同。此时,理想情况下,您将能够 qimport 合并变更集,但您不能这样做,因此您必须使用 'hg diff -r tip-1 -r tip' 来获得一个新的差异,即一切开始之前和合并两个结果之后的区别。然后你 'qimport` 那个 diff 并将它提交到你的补丁队列 repo 并附上一个说明它来自哪里的注释。

    绝对是次优的,但我能想到的最好的。我很想听听更好的解决方案。

    【讨论】:

    • 这基本上也是我想到的唯一计划,但我希望其他人可能有更好的主意。这段经历让我对使用 pbranch 而不是 MQ 产生了兴趣,因为它似乎为这个流程提供了更好的支持,因为补丁只是常规分支。
    • 如果我正在与其他人一起进行更改,我只会使用真正的提交而不是补丁。即使我们从未从那个克隆推回“上游”,它也为我们提供了一个工作场所和良好的合并工具,并且如果从“上游”中提取更改,然后我们可以稍后导入一个“hg diff”以发送到上游。
    【解决方案2】:

    恐怕没有自动合并补丁的方法。

    但是,您可以使用的一个“技巧”是创建新补丁,而不是在需要修改现有补丁时编辑/刷新它们。当你们都同意正确的做事方式时,然后hg qfold 补丁。

    这样你就不会因为创建新补丁而互相踩踏。

    【讨论】:

    • 是的,我一定会强制其他贡献者从现在开始只发送新补丁。感谢您的提示!
    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2023-03-10
    • 1970-01-01
    • 2011-07-08
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多