Mercurial Queues:从多个仓库合并补丁

4
我在一个仓库中使用Mercurial Queues,并将这些补丁放置在一个补丁仓库中。另一位贡献者克隆了我的补丁队列并进行了自己的更改。现在,我想将他们的更改合并到我的本地补丁仓库中。
我正在尝试寻找执行此合并的良好工作流程,其中:
- 反映了贡献者的变更集在补丁仓库历史记录中。 - 在冲突情况下调用用户的合并工具。
最初,我只是尝试直接合并补丁。这在非常简单的情况下还可以,但当许多东西发生变化时就无法正常工作,因为补丁依赖于行号上下文,而这不像是我需要自己调整的东西。总的来说,我发现检查补丁的三方差异过于复杂。
有更好的方法吗?
2个回答

1

处理这个问题没有很好的方法。我可能会创建两个克隆版本,一个用于qfinish您的补丁,另一个用于贡献者的补丁。在这一点上,您将拥有每个单独补丁的影响应用的存储库。然后,您可以将其中一个克隆版本hg pull到另一个克隆版本中,hg merge将让您使用图形工具合并补丁的结果,而唯一的差异应该是您的补丁中的差异。此时,理想情况下,您将能够qimport合并变更集,但您无法执行此操作,因此必须使用'hg diff -r tip-1 -r tip'获取新的差异,即从开始之前到合并两个结果之后的差异。然后,您可以“qimport”该差异,并在备注中注明其来源,将其提交到您的补丁队列存储库中。

显然不是最佳解决方案,但这是我能想到的最好的方法。我很乐意听取更好的解决方案。


基本上这也是我想到的唯一计划,但我希望其他人可能有更好的想法。这次经历让我对使用[pbranch](http://arrenbrecht.ch/mercurial/pbranch/index.htm)产生了兴趣,而不是MQ,因为它似乎为此流程提供了更好的支持,因为补丁只是常规分支。 - J. Ryan Stinnett
如果我与他人合作进行更改,我会使用真实的提交而不是补丁。即使我们从那个克隆中永远不推回“上游”,它也为我们提供了一个工作场所和良好的合并工具,并且轻松地从“上游”拉取更改,然后我们可以稍后导入'hg diff'以将更改发送到“上游”。 - Ry4an Brase

0

很抱歉,没有自动合并补丁的方法。

不过,有一个“技巧”可以使用,即在需要修改补丁时创建新的补丁而不是编辑/刷新现有的补丁。当您们都同意正确的操作方式后,再使用hg qfold合并补丁。

这样做的好处是,由于您创建了新的补丁,所以不会互相干扰。


是的,我一定会强制要求其他贡献者从现在开始只发送新的补丁。谢谢你的提示! - J. Ryan Stinnett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接