Git&WinMerge(msysgit)

Ant*_*ton 6 git winmerge msysgit mergetool

我已经阅读了关于这个主题的大量问答,并遵循了该信的所有指示.但是我仍然头疼,试图将Git设置为使用WinMerge进行差异和合并.

我使用Git终端采取了以下步骤:

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Run Code Online (Sandbox Code Playgroud)

我还在我的PATH变量中包含的目录中设置了一个脚本:

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
Run Code Online (Sandbox Code Playgroud)

当我执行

git mergetool
Run Code Online (Sandbox Code Playgroud)

在Git终端中,我看到:

Merging:
first.txt

Normal merge conflict for 'first.txt':
  {local}: modified
  {remote}: modified
Launching WinMergeU.exe:
Run Code Online (Sandbox Code Playgroud)

因此在我看来,$LOCAL$REMOTE变量并没有将任何内容传递给winmerge.sh脚本.我在这做错了什么?我必须在配置部分中假设它.

Von*_*onC 7

与我之前的答案(或者这个那个)相比,您的步骤包括winmerge.sh脚本末尾的额外双引号

    #!/bin/sh
    echo Launching WinMergeU.exe: $1 $2
    "C:/Program Files/WinMerge/WinMergeU.exe" 
      git /e /u /dl "Base" /dr "Mine" "$1" "$2""
                                               ^
                                               |
                                    (this shouldn't be here)

话虽这么说,那些答案是关于difftool使用的winmerge,它不支持3路合并(只有本地和远程,没有基础).

对于一个真正的合并工具,我建议kdiff3(如" git-merge是否可以忽略行尾差异? ")或araxis(如"如何将Araxis设置为MSYS git的差异/合并工具?"中所述) ,您可以在其中看到使用的三个变量(本地,远程和基本).