我已经阅读了关于这个主题的大量问答,并严格按照所有说明进行操作。但是,尝试使用 WinMerge 将 Git 设置为比较和 merge 时,我仍然感到头疼。
我使用 Git 终端执行了以下步骤:
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
我还在我的 PATH
变量中包含的目录中设置了一个脚本,内容如下:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
当我执行
git mergetool
在 Git 终端中,我看到:
Merging:
first.txt
Normal merge conflict for 'first.txt':
{local}: modified
{remote}: modified
Launching WinMergeU.exe:
所以在我看来,$LOCAL
和 $REMOTE
变量没有将任何内容传递到 winmerge.sh
脚本中。我在这里做错了什么?我必须在配置部分假设它。
最佳答案
与我的 previous answer 相比(或 this one 或 that one ),您的步骤在 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)
也就是说,这些答案是关于使用 winmerge
的 difftool ,不支持 3-way merge (只有local和remote,没有base)。
对于真正的 merge 工具,我推荐 kdiff3
(如“Is it possible for git-merge to ignore line-ending differences? ”)或 araxis
(如 "How to set Araxis as diff / merge tool for MSYS git?" 中所述),您可以在其中看到使用的三个 变量(本地、远程和基础)。
关于Git 和 WinMerge (msysgit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045199/