Git 和 WinMerge (msysgit)

标签 git msysgit winmerge mergetool

我已经阅读了关于这个主题的大量问答,并严格按照所有说明进行操作。但是,尝试使用 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 onethat 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/

相关文章:

git - Sourcetree 将 HEAD 设置为 origin/master

wordpress - WPengine 和 git

git - 如何在 cmder 中运行 msysgit?

git - 如何告诉 Visual Studio 将 WinMerge 与 Git 结合使用?

Git 克隆存储库错误 : RPC failed; result=56, HTTP 代码 = 200

git 快速导出格式和空格

git - 使用 msysgit 进行字符编码

git - msysgit git-am 无法应用它自己的 git 格式补丁序列

merge - 如何使WinMerge保持左右移动?

regex - 如何使用 winmerge 行过滤器忽略包含特定单词的行?