如何让winmerge在git中显示新文件的diff? [英] How to get winmerge to show diff for new file in git?

查看:305
本文介绍了如何让winmerge在git中显示新文件的diff?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以用winmerge来显示修改文件的差异。但对于新文件,winmerge会提供一个对话框,说明左路径无效!。我希望它将左窗格显示为空白,右窗格显示文件的内容。

  $ git difftool head ^ newfile.txt 

winmerge对话框:



我是git版本2.8.2.windows.1



这是我用于difftool的git配置:

  [diff] 
工具= winmerge
[difftool]
提示符= false
[difftoolwinmerge]
cmd = \C:\\ Program Files(x86)\\WinMerge\\WinMergeU.exe\-e -ub -wl \$ LOCAL \\\ \\$ REMOTE \

我错过了什么?

解决方案

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



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



winmerge.sh (类似于此处

 #!/ bin / sh 
#$ 1是$ LOCAL
#$ 2是$ REMOTE
NULL =/ dev / null
empty =$ HOME / winmerge.empty
if [$ 2=$ NULL];然后
#添加
D:/setups/WinMerge/WinMergeU.exe-e -ub -wl -wr$ 1$ empty
elif [$ 1=$空值 ] ;然后
#被删除
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 中的脚本。


$ b .gitconfig

  [diff] 
工具= winmerge
[difftool]
提示符= false
[difftoolwinmerge]
cmd = winmerge.sh$ LOCAL$ REMOTE

在提交之前还要分析未跟踪的文件(新文件),我做了

  $ git add -N  - 不全。 

然后使用 difftool -N --no-all 只会将新文件的路径添加到索引中,而不会添加到它们的内容( - no-all 是不要阶段删除的文件)。


I can get winmerge to show me diffs for modified file. But for new files, winmerge gives a dialog saying 'Left path is invalid!'. I want it to show the left pane as empty and right pane with the contents of the file.

$ git difftool head^ newfile.txt

winmerge Dialog:

I'm on git version 2.8.2.windows.1

This is my git config for difftool:

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

What am I missing?

解决方案

I could not find this exact workaround so I'm posting this. Hopefully, someone finds it useful.

I use a winmerge.sh script which simply passes an already created empty file for newly added (or removed) file. The script is in a dir that's on my PATH or /git/cmd/ dir for git bash.

winmerge.sh (similar to one 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

I keep an empty file winmerge.empty at this path $HOME (which is c:/users/<username>).

I use the sh script in .gitconfig.

.gitconfig

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

Note:

To diff untracked files (new files) also before committing, I do

$ git add -N --no-all .

then use difftool. -N --no-all only adds the path of new files to index but not their content (--no-all is required to NOT stage the deleted files).

这篇关于如何让winmerge在git中显示新文件的diff?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆