从Git1.6.3开始,您可以使用git difftool 脚本: see 我的回答如下.
可能是这个article会帮助你。以下是最好的部分:
有两种不同的方法来指定外部差异工具。
第一种是您使用的方法,通过设置 GIT_EXTERNAL_DIFF 变量。但是,该变量应该指向可执行文件的完整路径。此外,GIT_EXTERNAL_DIFF 指定的可执行文件将使用一组固定的 7 个参数进行调用:
path old-file old-hex old-mode new-file new-hex new-mode
由于大多数 diff 工具需要不同的参数顺序(并且仅需要一些),因此您很可能必须指定一个包装器脚本,该脚本又调用真正的 diff 工具。
第二种方法是我比较喜欢的通过“git”配置外部 diff 工具
配置”。这是我所做的:
1)创建一个包装脚本“git-diff-wrapper.sh”,其中包含类似的内容
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
正如您所看到的,只有第二个(“旧文件”)和第五个(“新文件”)参数将被
传递给 diff 工具。
2) Type
$ git config --global diff.external <path_to_wrapper_script>
在命令提示符处,替换为“git-diff-wrapper.sh”的路径,因此您的 ~/.gitconfig 包含
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
请务必使用正确的语法来指定包装器脚本和 diff 的路径
工具,即使用正斜杠而不是反斜杠。就我而言,我有
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
在 .gitconfig 和
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
在包装脚本中。注意后面的“猫”!
(我想'| cat
' 仅对于某些可能无法返回正确或一致的返回状态的程序才需要。如果您的 diff 工具具有明确的返回状态,您可能想尝试不使用尾随的 cat)
(迪奥米迪斯·斯皮内利斯 adds 在评论中:
The cat
需要命令,因为diff(1),如果文件不同,默认情况下会退出并显示错误代码。
Git 期望外部 diff 程序仅在发生实际错误时退出并显示错误代码,例如如果内存不足。
通过管道输出git
to cat
非零错误代码被屏蔽。
更高效的是,程序可以直接运行exit
且参数为 0。)
(上面引用的文章)是外部工具的理论通过配置文件定义(不是通过环境变量)。
实际中(还是外部工具的配置文件定义),可以参考:
-
如何使用 msysgit / gitk 设置 DiffMerge?说明了 MsysGit 和 gitk 的 DiffMerge 和 WinMerge 的具体设置
-
如何设置编辑器以在 Windows 上使用 Git?Notepad++ 作为外部编辑器的定义。