git difftool
会告诉你它会尝试什么。
$ git difftool
This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
kompare emerge vimdiff
Viewing (1/1): 'this'
Launch 'emerge' [Y/n]?
我们可以在guess_merge_tool
函数中找到进程。
guess_merge_tool () {
list_merge_tool_candidates
cat >&2 <<-EOF
This message is displayed because '$TOOL_MODE.tool' is not configured.
See 'git ${TOOL_MODE}tool --tool-help' or 'git help config' for more details.
'git ${TOOL_MODE}tool' will now attempt to use one of the following tools:
$tools
EOF
# Loop over each candidate and stop when a valid merge tool is found.
IFS=' '
for tool in $tools
do
is_available "$tool" && echo "$tool" && return 0
done
list_merge_tool_candidates
设置的列表$tools
。它假定如果未设置 DISPLAY,则您没有在 MacOS 上不正确的 GUI。
然后它简单地遍历它们并选择它找到的第一个可执行文件以供使用type
。
更新
我在执行 git diff 时遇到了一些奇怪的差异结果(我怀疑 BOM 处理问题)。我想询问供应商(例如 p4merge),但不确定它是 p4merge、vimdiff 还是其他任何东西。
如果您对此有疑问,git diff
那就是git diff
not git difftool
。我认为对于做什么有些困惑git difftool
,所以这里有一个快速概述。
git diff
不使用 git-difftool。git difftool
不为git diff
. git diff
有自己的内部差异实现。它还可以通过提供--ext-diff
.
当你运行git difftool
它时,它会选择一个外部差异程序并使用三个环境变量运行它:$LOCAL、$REMOTE 和 $MERGED。$LOCAL 是文件旧版本的路径,$REMOTE 是新文件的路径,$MERGED 是文件名以便显示。就是这样。它与 没有关系git diff
。
我们可以git difftool
通过将自定义 difftools 添加到 .gitconfig 来查看有什么作用:
[difftool "echo"]
cmd = echo "LOCAL: $LOCAL, REMOTE: $REMOTE, MERGED: $MERGED"
[difftool "less"]
cmd = less "$LOCAL" "$REMOTE"
git difftool -t echo
将显示环境变量。将查看寻呼机git difftool -t less
中文件的新旧版本的内容。less
如果您遇到问题git diff
,git difftool
则与它无关。p4merge 和 vimdiff 也不应该。