2016-09-28 199 views
4

我可以拿winmerge来显示修改文件的差异。但对于新文件,winmerge会提供一个对话框,说明“左路径无效!”。我希望它将左窗格显示为空白,右窗格显示文件的内容。如何让winmerge在git中显示新文件的diff?

$ git difftool head^ newfile.txt 

的WinMerge对话框:

enter image description here

我对Git版本2.8.2.windows.1

这是我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

回答

4

我无法找到这个确切的解决方法,所以我张贴这个。希望有人认为它有用。

我使用一个winmerge.sh脚本,它只是为新添加(或删除)的文件传递一个已经创建的空文件。该脚本位于我的PATH/git/cmd/目录中,用于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才能暂存已删除的文件)。

相关问题