6

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

$ git difftool head^ newfile.txt

winmerge 对话框:

在此处输入图像描述

我在 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\"

我错过了什么?

4

1 回答 1

8

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

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

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>

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不需要暂存已删除的文件)。

于 2016-10-15T20:25:59.960 回答