Git 在没有任何参数的情况下启动合并工具



在机器 A 上,git mergetool按预期运行"超出比较 3"。在计算机 B 上,BC3 启动,但未在命令行上传递任何参数,因此显示介绍屏幕而不是实际合并。

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

merge.tool=bc3
mergetool.bc3='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.cmd='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.path=C:AppsBeyondCompare3bcomp.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 3bcomp.exe" 
        ./somefile.cs.LOCAL.4192.cs 
        ./somefile.cs.REMOTE.4192.cs
        ./somefile.cs.BASE.4192.cs
        -mergeoutput=somefile.cs /BCompWnd=$00140644

而在损坏的机器 B 上,它只是:

c:AppsBeyondCompare3BCompare.exe

我需要哪种魔法咒语?

只是一个猜测:如果 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 上的完整调用。

相关内容

最新更新