如何让WinMerge在Git中显示新文件的差异?

6

我可以使WinMerge为修改过的文件显示差异。但是对于新文件,WinMerge会弹出一个对话框,显示“左路径无效!”。我希望它能将左侧窗格显示为空,右侧窗格显示文件内容。

$ 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\"

我错过了什么?

2
到目前为止,我看到了类似的问题:http://stackoverflow.com/a/33369083/6309 - VonC
1个回答

8
我找不到这个确切的解决方法,所以我发帖分享一下。希望有人会觉得有用。
我使用一个名为winmerge.sh的脚本,它会传递一个已经创建的空文件作为新增或删除的文件。该脚本在我的PATH目录或者git bash的/git/cmd/目录下。 winmerge.sh这里的类似。
#!/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>)。

我在.gitconfig中使用sh脚本。

.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 来不将删除的文件暂存)。


谢谢,这对我解决类似问题非常有帮助! - schlonzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接