使用tortoiseHg导入包含针对mercurial存储库的冲突更改的修补程序

时间:2011-07-04 11:00:35

标签: mercurial import patch conflict tortoisehg

我已成功导入补丁而没有相互冲突的更改。但是当我尝试导入具有冲突变化的补丁时,它会抛出一个错误,说“Hunk#1 FAILED at 11 ..”。合并更改没有选项。有没有其他方法可以实现这个目标?

2 个答案:

答案 0 :(得分:5)

必须手动修复失败的帅哥。应该有一个* .rej文件,其中包含来自补丁的被拒绝的hunk。您必须手动应用它。

请参阅:https://www.mercurial-scm.org/wiki/HandlingRejects

答案 1 :(得分:4)

手动解决

最新版本的TortoiseHg 2.1提供了一些工具,可帮助您解决补丁中被拒绝的块。当您应用补丁并且它有拒绝时,对于每个拒绝的文件,它会询问您是否要解析被拒绝的块。如果单击“是”,它将显示一个屏幕,其中包含文件的内容(已应用成功的块)以及每个被拒绝的块,以允许您手动执行更改,并将每个更改标记为已解决。

实现三方合并

我有时处理大量拒绝的方式是修改补丁。在TortoiseHg 1.x中,我可以选择一个节点,右键单击另一个节点并实际修改补丁。在TortoiseHg 2.x中,他们还没有重新加入,但解决方法并不是那么糟糕。您仍然可以使用hg rebase在命令行上修改补丁。在任何一种情况下,您都需要启用mqrebase扩展(并且您可能已经启用了前者)。这个答案不是教授如何使用mqrebase的地方(还有很多其他答案和文章可以做到这一点),所以我会对它们有所了解。

在这两者中,您需要将修补程序应用于它所基于的修订版(或者应用于干净地应用或接近干净的修订版)。

<强>命令行:

  1. 运行hg rebase -s patchRev -d tip以及rebase命令所需的任何其他开关。

    这将打开您的3向合并工具,以解决每个文件的冲突。

  2. 运行hg qrefresh以确保合并结果已更新到修补程序中。

  3. TortoiseHg用户界面

    1. 将补丁作为正常变更集完成。
    2. 将更改集重新设置到提示上:
      • 更新提示。这很重要,因为它用于设置rebase操作的目标。
      • 右键单击临时变更集,然后选择重新登录以打开Rebase对话框。
      • 检查来源和目的地是否正确,然后点击继续。如果存在合并冲突,请点击显示的已解决链接以打开“解决”对话框。
      • 点击 Mercurial Resolve ,让Mercurial尝试自动解决一些冲突。
      • 对于任何其他仍然使用工具解析以显示所选文件的3向合并。
      • 解决所有问题后,请点击“解决”对话框中的关闭
      • 点击Rebase对话框中的继续然后关闭
    3. 右键点击提示处的临时变更集,然后转到修改历史记录&gt; 导入到MQ 。现在它又是一个补丁。
    4. 我更喜欢后一种方法用于更麻烦的实例,因为默认情况下它会阻止Mercurial自动解决冲突。它允许我选择解析文件的顺序以及解决方法,并显示每个步骤的进度状态。