【问题标题】:Mercurial fails to merge via command lineMercurial 无法通过命令行合并
【发布时间】:2013-12-07 14:52:55
【问题描述】:

我的 mercurial 安装拒绝通过命令行合并。这是我打开verbosedebug后的输出。

C:\src\StackOverflow>hg resolve --all --verbose --debug
couldn't find merge tool codecompare_diff
couldn't find merge tool codecompare_merge
couldn't find merge tool bcompare
couldn't find merge tool beyondcompare3
couldn't find merge tool beyondcompare3-noauto
couldn't find merge tool rekisa
couldn't find merge tool UltraCompare
couldn't find merge tool araxis
couldn't find merge tool meld
couldn't find merge tool diffuse
picked tool 'kdiff3' for StackOverflow/StackOverflow.csproj (binary False symlink False)
merging StackOverflow/StackOverflow.csproj
my StackOverflow/StackOverflow.csproj@4f4faeac0fea+ other StackOverflow/StackOverflow.csproj@ae29e8c6bb88 ancestor StackOverflow/StackOverflow.csproj@399376fedfc5
The system cannot find the path specified.
merging StackOverflow/StackOverflow.csproj failed!

注意:合并实际上是成功的(弹出kdiff3,我合并保存),但是mercurial却是一头雾水。

如何确定 Mercurial 找不到哪个 path

我已尝试更新到最新版本 (2.8) 并查看我的 mercurial.ini 是否有任何可疑文件。我还使用了不同的合并工具 p4merge 来达到同样的效果。

【问题讨论】:

  • 也许你应该把它迁移到Meta Stack Overflow,因为它是关于SO的?
  • 这不是关于 SO:而是关于 Mercurial。我正在检查的项目称为 StackOverflow,但这与上下文无关 :-)
  • 您在clone 的新包装盒中尝试过吗?似乎是“系统”问题,而不是 Mercurial。
  • 检查 [ui] 部分中的合并定义的 ini 文件(全局和存储库) - 似乎您没有指定
  • "系统找不到指定的路径。"是来自 Windows 而不是 Mercurial 的消息。您的 kdiff3 工具是否安装在名称中带有空格的目录中?或者也许是 kdiff3 调用的一些工具?也许某处有一个没有“”或其他东西的环境变量?或者可能有一个环境变量指向一个不存在的目录或文件。正如@LazyBadger 建议的那样,检查您的 .ini 文件,但要注意可能不正确的路径。

标签: command-line merge mercurial


【解决方案1】:

嗯……其实。

这可能是愚蠢的“解决方案”,但您可以查看 mercurial 附带的 filemerge.py 文件。 该文件定义了 mercurial 如何进行合并(调用外部合并工具、处理结果等)。

您可以在filemerge 函数中看到以下几行:

    ui.debug("picked tool '%s' for %s (binary %s symlink %s)\n" %
               (tool, fd, binary, symlink))
    [...]
        ui.status(_("merging %s\n") % fd)

    ui.debug("my %s other %s ancestor %s\n" % (fcd, fco, fca))

他们在您的输出中给出了相应的消息:

picked tool 'kdiff3' for StackOverflow/StackOverflow.csproj (binary False symlink False)
merging StackOverflow/StackOverflow.csproj
my StackOverflow/StackOverflow.csproj@4f4faeac0fea+ other StackOverflow/StackOverflow.csproj@ae29e8c6bb88 ancestor StackOverflow/StackOverflow.csproj@399376fedfc5

然后从filemerge函数调用_xmerge函数,代码如下:

  needcheck, r = func(repo, mynode, orig, fcd, fco, fca, toolconf,
                       (a, b, c, back))

然后ui.warn(onfailure % fd) 到达334 行或368 行(我不知道),这会给出最后一条错误消息:

merging StackOverflow/StackOverflow.csproj failed!

ui.debug("my %s other %s ancestor %s\n" % (fcd, fco, fca))ui.warn(onfailure % fd) 之间的某个地方,实际上达到ui.warn(onfailure % fd) 是有原因的(可能在_xmerge 中)。您可以尝试通过在filemerge.py 文件的各个位置插入各种调试输出并重试合并来发现它。这就是我目前所能推荐的(因为我无法在我的机器上重现你的错误和上下文)。


P.S.:正如 santiagopim 建议的那样,您可能更愿意将 WC 复制到干净的 PC 并安装干净的 mercurial 并在那里重试。因为错误很可能是由一些错误配置引起的。但是,如果您更愿意尝试就地解决问题...

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2011-01-03
    • 2021-03-20
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多