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

时间:2016-09-28 20:14:07

标签: git winmerge difftool

我可以让winmerge向我展示修改过的文件的差异。但对于新文件,winmerge会给出一个对话框,说“左路径无效!”。我希望它将左窗格显示为空,右窗格显示文件的内容。

$ git difftool head^ newfile.txt

winmerge对话:

enter image description here

我正在使用git版本2.8.2.windows.1

这是我对difftool的git配置:

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

我错过了什么?

1 个答案:

答案 0 :(得分:4)

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

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

winmerge.sh (类似于一个here

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

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

我使用sh中的.gitconfig脚本。

<强>的.gitconfig

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

注意:

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

$ git add -N --no-all .

然后使用difftool-N --no-all仅将新文件的路径添加到索引中,但不添加其内容(--no-all是否需要暂存已删除的文件。)