【问题标题】:Git launches mergetool without any argumentsGit 启动没有任何参数的合并工具
【发布时间】:2013-12-17 14:11:39
【问题描述】:

在机器 A 上,git mergetool 按预期运行 Beyond Compare 3。在机器 B 上,BC3 启动但没有在命令行上传递任何参数,因此显示的是介绍屏幕而不是实际的合并。

我将配置从机器A复制到机器B,除了安装路径和push.default=simple之外,git config --list是相同的:

merge.tool=bc3
mergetool.bc3='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.cmd='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.path=C:\Apps\BeyondCompare3\bcomp.exe
push.default=simple

唯一的其他区别是机器 A 在 Win7 64 位下具有 git 1.7.11,而机器 B(不工作的机器)在 Win8 32 位下具有 git 1.8.4。

ProcessHacker 显示机器 A 上的命令行(对于 完全相同 存储库,逐位)是:

"c:\Program Files (x86)\Beyond Compare 3\bcomp.exe" 
        ./somefile.cs.LOCAL.4192.cs 
        ./somefile.cs.REMOTE.4192.cs
        ./somefile.cs.BASE.4192.cs
        -mergeoutput=somefile.cs /BCompWnd=$00140644

在损坏的机器 B 上,这很简单:

c:\Apps\BeyondCompare3\BCompare.exe

这里需要什么魔法咒语?

【问题讨论】:

  • 为什么工具在不同的文件夹,机器之间的配置是一样的?
  • @CharlesB 就像我说的那样,该工具的配置“除了安装路径之外是相同的”,如果不清楚,抱歉。路径不同,其他一切都相同。

标签: git git-merge msysgit


【解决方案1】:

只是猜测:如果 Git 已经(在其出厂配置中)知道 bc3 工具,它将使用 mergetool.bc3.path 以及标准参数。如果没有,它会寻找mergetool.bc3.cmd,但是这个需要在命令中指明正确的参数:

mergetool.bc3.cmd="'c:/apps/BeyondCompare3/bcomp.exe' '$LOCAL' '$REMOTE' '$BASE' '$MERGED'"

由于一个模糊的原因,在机器 B 上,Git 不知道对 bc3 的调用,并使用 mergetool.bc3.cmd 回退,在您的情况下它会丢失正确的参数。在机器 A 上,Git 知道如何与 BC3 对话,并将使用工具的正确调用,仅使用 mergetool.bc3.path

要在机器 A 和 B 上分别验证此删除 mergetool.bc3.cmdmergetool.bc3.path,行为应该与您观察到的完全相同。

要修复它,请使用 mergetool.bc3.cmd 上的完整调用。

【讨论】:

  • 好吧,这行得通。如果我同时删除cmdpath,两台机器都报告找不到BC3。如果我删除cmd 但留下path,两台机器都可以工作。所以看起来机器 A 在原始设置中工作只是因为 git 完全忽略了mergetool.bc3.cmd。哦,还有,mergetool.bc3 本身似乎是不必要的。谢谢!
  • 您可能在机器 A 上有一个 [mergetool "bc3"] 条目,但在机器 B 上没有。在两台机器上尝试:git config --global --edit
猜你喜欢
  • 2018-05-05
  • 2017-04-28
  • 2018-10-06
  • 2015-10-22
  • 1970-01-01
  • 2020-05-10
  • 2021-04-22
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多