6

什么是默认的 git diff 工具(和合并工具)?
我在哪里(以及如何)可以找到它?

我从来没有明确地为 git difftool(也没有 mergetool)设置任何配置,
所以git config --get difftool什么也没显示。

git 文档说(https://git-scm.com/docs/git-difftool):

diff.tool如果未设置配置变量,git difftool将选择合适的默认值。

我怎样才能知道它选择了哪一个?“合适
” 的算法是如何工作的?


让我分享一下我试图通过我的 git 找出当前选择的 diff 工具的原因:
我在执行时遇到了一些奇怪的 diff 结果git diff(我怀疑 BOM 处理问题)。
我想询问供应商(例如,p4merge),
但不确定是否是p4mergevimdiff或其他任何东西。

我希望可能有一个类似的命令git difftool --current

4

1 回答 1

6

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 diffnot git difftool。我认为对于做什么有些困惑git difftool,所以这里有一个快速概述。

git diff不使用 git-difftoolgit 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 diffgit difftool则与它无关。p4merge 和 vimdiff 也不应该。

于 2020-09-21T05:06:16.857 回答