首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认的git工具(和合并工具)是什么?

默认的git工具(和合并工具)是什么?
EN

Stack Overflow用户
提问于 2020-09-21 03:19:28
回答 1查看 1.8K关注 0票数 6

默认的git工具(和合并工具)是什么?

在哪里(以及如何)我能找到它?

我从来没有显式地为git散乱工具(也不是mergetool)设置任何配置,

所以git config --get difftool什么也没有显示。

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

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

我怎么知道它选了哪一个?

“合适”的算法是如何工作的?

让我分享一下我为什么要通过git来找出当前选择的diff工具的原因:

我在执行git diff时遇到了一些奇怪的不同结果(我怀疑BOM处理问题)。

我想问一下卖主(比如p4merge),

但不确定是p4mergevimdiff还是其他任何东西。

我预计可能会有类似于git difftool --current的命令。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 05:06:16

git difftool会告诉你它将尝试什么。

代码语言:javascript
复制
$ 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 function中找到这个过程。

代码语言:javascript
复制
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的列表。它假定,如果没有设置显示,您就没有GUI,这在MacOS上是不正确的。

然后它简单地遍历它们并选择第一个它为使用type找到一个可执行文件的文件。

更新

我在执行git时遇到了一些奇怪的不同结果(我怀疑BOM处理问题)。我想询问一下供应商(例如p4merge),但不确定它是p4merge、vimdiff还是其他任何东西。

如果您对git diff有异议,那就是git diff而不是git difftool。我认为对于git difftool所做的事情有一些混淆,所以下面是一个简单的概述。

git diff 不使用git-difftool.git difftool不选择用于git diff的diff工具。git diff有自己的内部diff实现。它还可以通过提供--ext-diff来使用外部的diff程序,比如GNU。

当您运行git difftool时,它会选择一个外部的diff程序,并使用三个环境变量运行它:$LOCAL、$REMOTE和$MERGED。$LOCAL是文件旧版本的路径,$REMOTE是新版本的路径,$MERGED是文件名的路径,因此可以显示它。事情就是这样。与git diff无关。

通过向git difftool添加自定义的扩散工具,我们可以看到.gitconfig做了什么:

代码语言:javascript
复制
[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也不应该。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63985751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档