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

Jay*_*ena 9 import mercurial patch conflict tortoisehg

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

syl*_*aar 5

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

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


Joe*_*ant 4

手动解析

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

实现三向合并

我有时处理大量拒绝的方法是重新调整补丁的基础。在 TortoiseHg 1.x 中,我可以选择一个节点,右键单击另一个节点,然后实际重新调整补丁基数。在 TortoiseHg 2.x 中,他们还没有将其添加回来,但解决方法还不错。您仍然可以使用命令行上的 rebase 补丁hg rebase。无论哪种情况,您都需要启用mqrebase扩展(并且您可能已经启用了前者)。这个答案不是教授如何使用mqor的地方rebase(还有很多其他答案和文章可以做到这一点),所以我将假设对它们有一定的熟悉。

在这两种情况下,您都需要将补丁应用于其所基于的修订版(或者干净地应用或接近干净的修订版)。

命令行:

  1. 跑步。以及您想要在命令中使用的任何其他开关。hg rebase -s patchRev -d tiprebase

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

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

乌龟Hg UI

  1. 将补丁作为正常变更集完成。
  2. 将该变更集重新设置到提示上:
    • 更新到提示。这很重要,因为它用于设置变基操作的目标。
    • 右键单击临时变更集并选择“Rebase”以显示“Rebase”对话框。
    • 检查源和目标是否正确,然后单击继续。如果存在合并冲突,请单击显示的已解决链接以打开“解决”对话框。
    • 单击Mercurial Resolve让 Mercurial 尝试自动解决一些冲突。
    • 对于剩下的任何内容,请使用Tool Resolve为选定的文件提供 3 路合并。
    • 全部解决后,单击“解决”对话框中的“关闭” 。
    • 单击“继续”,然后单击“变基”对话框中的“关闭” 。
  3. 现在右键单击提示处的临时变更集,然后转到修改历史记录>导入到 MQ。现在又是补丁了。

对于更麻烦的情况,我更喜欢后一种方法,因为默认情况下它会阻止 Mercurial 自动解决冲突。它允许我选择解决文件的顺序以及解决它们的方式,显示每个步骤的进度状态。