如何让 winmerge 显示 git 中新文件的差异?

How to get winmerge to show diff for new file in git?

我可以让 winmerge 显示修改文件的差异。但是对于新文件,winmerge 会给出一个对话框说 'Left path is invalid!'。我希望它将左窗格显示为空,右窗格显示文件内容。

$ git difftool head^ newfile.txt

winmerge 对话框:

我正在使用 git 版本 2.8。2.windows.1

这是我的 git difftool 配置:

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    cmd = \"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -ub -wl \"$LOCAL\" \"$REMOTE\"

我错过了什么?

我找不到这个确切的解决方法,所以我发布了这个。希望有人觉得它有用。

我使用 winmerge.sh 脚本,它只是为新添加(或删除)的文件传递一个已经创建的空文件。该脚本位于 PATH/git/cmd/ 目录中 git bash.

的目录中

winmerge.sh(类似于一个here

#!/bin/sh
#  is $LOCAL
#  is $REMOTE
NULL="/dev/null"
empty="$HOME/winmerge.empty"
if [ "" = "$NULL" ] ; then
    # added
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl -wr "" "$empty"
elif [ "" = "$NULL" ] ; then
    # removed
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl "$empty" ""
else
    # modified
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl "" ""
fi

我在这个路径$HOME(即c:/users/<username>)保留了一个空文件winmerge.empty

我在.gitconfig中使用了sh脚本。

.git配置

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    cmd = winmerge.sh "$LOCAL" "$REMOTE"

注:

为了在提交之前区分未跟踪的文件(新文件),我这样做

$ git add -N --no-all .

然后使用difftool-N --no-all 只将新文件的路径添加到索引而不是它们的内容(需要 --no-all 才能不暂存已删除的文件)。