完成上面我之前的"diff.external" config answer:
作为mentioned by Jakub,Git1.6.3引入git difftool,最初于2008年9月提出:
用法='[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(请参阅本答案最后部分的--extcmd)
$LOCAL 包含起始修订版中的文件内容,$REMOTE 包含结束修订版中文件的内容。
$BASE 包含工作中文件的内容
基本上是git-mergetool修改为对git index/worktree进行操作。
此脚本的常见用例是当您有暂存或未暂存的更改并且您希望在并排差异查看器中查看更改(例如xxdiff、tkdiff 等)。
git difftool [<filename>*]
另一个用例是当您希望看到相同的信息但正在比较任意提交时(这是 revarg 解析可能更好的部分)
git difftool --start=HEAD^ --end=HEAD [-- <filename>*]
最后一个用例是当您想将当前工作树与 HEAD 以外的其他内容(例如标签)进行比较时
git difftool --commit=v1.0.0 [-- <filename>*]
注意:由于 Git 2.5,git config diff.tool winmerge 就足够了!
见“git mergetool winmerge”
而since Git 1.7.11,您可以选择--dir-diff,以便在填充两个临时目录后生成可以一次比较两个目录层次结构的外部差异工具,而不是每次运行外部工具的一个实例一个文件对。
在 Git 2.5 之前:
使用自定义差异工具配置difftool 的实际案例:
C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false
将 winmerge.sh 存储在 PATH 的目录部分中:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"
如果您有其他工具(kdiff3、P4Diff、...),请创建另一个 shell 脚本和相应的 difftool.myDiffTool.cmd 配置指令。
然后您可以使用diff.tool 配置轻松切换工具。
您也有此blog entry by Dave 以添加其他详细信息。
(或this question 用于winmergeu 选项)
此设置的兴趣在于 winmerge.shscript:您可以自定义它以考虑特殊情况。
例如,请参阅David Marble 的answer below 以了解处理以下问题的示例:
正如Kem Mason 在his answer 中提到的,您还可以使用--extcmd 选项避免任何包装器:
--extcmd=<command>
指定用于查看差异的自定义命令。 git-difftool 忽略配置的默认值并在指定此选项时运行 $command $LOCAL $REMOTE。
例如,gitk is able to run/use any diff tool 是这样的。