Git在没有任何参数的情况下启动mergetool

Rom*_*kov 6 git msysgit git-merge

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

我将配置从机器A复制到机器B,并且git config --list与安装路径相同,并且push.default=simple:

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
Run Code Online (Sandbox Code Playgroud)

唯一的区别是机器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
Run Code Online (Sandbox Code Playgroud)

在破碎的机器B上,它只是:

c:\Apps\BeyondCompare3\BCompare.exe
Run Code Online (Sandbox Code Playgroud)

我需要哪种神奇的咒语?

Cha*_*esB 4

只是猜测:\xc2\xa0如果 Git 已经(在其工厂配置中)了解 bc3 工具,它将mergetool.bc3.path与标准参数一起使用。如果没有,它会查找mergetool.bc3.cmd,但这需要在命令中指定正确的参数:

\n\n
mergetool.bc3.cmd="\'c:/apps/BeyondCompare3/bcomp.exe\' \'$LOCAL\' \'$REMOTE\' \'$BASE\' \'$MERGED\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

要修复此问题,请使用 上的完整调用mergetool.bc3.cmd

\n