当我输入时git diff,我想用我选择的视觉差异工具(Windows上的SourceGear"diffmerge")查看输出.如何配置git来执行此操作?
我使用@ VonC的优秀指令来配置我的开发系统,以便git difftool <BRANCH1> <BRANCH1>调用WinMerge.这是我做的:
放置以下内容~/.gitconfig:
[DIFF]
tool = winmerge
Run Code Online (Sandbox Code Playgroud)
[difftool"winmerge"]
cmd = winmerge.sh \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
[difftool]
prompt = false
Run Code Online (Sandbox Code Playgroud)创建了一个/usr/bin/winmerge.sh包含以下内容:
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub "$1" "$2"
现在,当我尝试通过启动WinMerge时git difftool <BRANCH1> <BRANCH1>,我收到了似乎正确的参数传递:
Launching WinMergeU.exe: /tmp/21qMVb_file1.c /tmp/1ACqik_file1.c
但是,由于一些奇怪的原因,而不是WinMerge并排显示两个文件,它提示输入第一个文件作为右侧,第二个文件接受为左侧:

为什么会这样?我在配置步骤中遗漏了什么?
PS当我在命令行输入时winmerge.sh file1.c file2.c,WinMerge会立即并排显示两个文件,就像我期望的那样.
更新:哦,哇,我刚刚注意到Both paths are invalidWinMerge提示底部的消息(并更新了屏幕截图以强调这一点).看起来这些文件根本不是由difftool生成的,或者路径有问题.
我喜欢在cygwin上使用git,但我唯一的缺点是当我想要时git difftool我不能使用任何有用的东西.git diff对我来说大部分时间都没问题,但有时候我想用winmerge来查看这些差异git difftool是否有某种方法来设置它?
我从Git Attributes文档中设置了以下过滤器:
git config filter.dater.smudge expand_date
git config filter.dater.clean 'perl -pe s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
Run Code Online (Sandbox Code Playgroud)
现在我运行以下命令:
touch nfile.txt
git add --all
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
error: copy-fd: read returned Bad file descriptor
error: cannot feed the input to external filter perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/"
error: external filter perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/" failed
Run Code Online (Sandbox Code Playgroud)
该错误似乎与我的脚本无关,因为如果我运行此错误,则不会出现错误:
cat nfile.txt | perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/"
Run Code Online (Sandbox Code Playgroud)
此外,这个旧线程提到错误可能是由于"从apply_filter调用的代码中的copy_fd",并建议修补filter_buffer_or_fdgit核心文件convert.c中的函数.就个人而言,如果我可以避免修补核心Git代码,我会非常高兴.
我需要清理错误消息,因为我不希望用户在提交的暂存阶段看到这种丑陋的输出.有办法避免这种情况吗?或者正确处理这种情况的方法?
如果之前已经回答过,我道歉.我在交换或互联网上找不到相同的文章.
我可以通过winmerge向我展示修改后的文件的差异。但是对于新文件,winmerge会显示一个对话框,提示“左路径无效!”。我希望它将左窗格显示为空白,而右窗格显示文件的内容。
$ git difftool head^ newfile.txt
Run Code Online (Sandbox Code Playgroud)
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\"
Run Code Online (Sandbox Code Playgroud)
我想念什么?