Git 的自动检测是脚本化的还是在某些 Git 可执行文件中?
这个问题基于 VonC 在 线程中的评论。
Git 对 difftool 或 mergetool 的自动检测是脚本化的还是在某些 Git 可执行文件中?
This question is based on VonC's comment at the thread.
Is Git's auto-detection for difftool or mergetool scripted or is it within some Git executable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它是在 git-mergetool 中编写的脚本。 我在我的副本的第 344 行找到了这个。
It's scripted in git-mergetool. I found this at line 344 of my copy.
正如 git mergetool 手册页中提到的,
现在,该列表来自哪里?
实际上,这些工具(及其自定义选项)在脚本中使用:
并由脚本 git-mergetool 使用,该脚本基于 git config merge.tool 命令进行选择。
但是有一些基于 git-mergetool--lib 中 valid_tool() 函数的“自动选择”:
它使用基于
mergetool..cmd
的 get_merge_tool_cmd() .如果该设置保留在 git 配置文件之一中...将选择该工具。
对...,Jakub Narębski 刚刚指出了
git-mergetool--lib
脚本:该函数恰当地命名为
guess_merge_tool()
(你认为我应该能够找到它!...)除此之外,以下内容可以解释它检测到 opendiff:As mentioned in the git mergetool man page,
Now, where does that list comes from?
Actually, those tools (and their custom options) are used in the script:
and used by the script git-mergetool, which does the selection based on
git config merge.tool
command.But there is a bit of 'auto-selection' based on the valid_tool() function in git-mergetool--lib:
It uses get_merge_tool_cmd() which is based on
mergetool.<aMergeToolName>.cmd
.If that setting remain in one of the git config files... that tool will be selected.
Right..., Jakub Narębski just pointed out the right section in the
git-mergetool--lib
script:That function aptly named
guess_merge_tool()
(you think I should be able to find it!...) does amongst other thing, the following, which could explain it detects opendiff:与我 2009 年的答案相比,脚本(例如
git-mergetool-- lib.sh
)已随 Git 2.41(2023 年第 2 季度)发生更改:“
git mergetool
“(man) 和git difftool
(man) 学习新的配置guiDefault
以选择性地支持当设置$DISPLAY
时,会自动将 guitool 配置为非 gui-tool。请参阅 提交 42943b9(2023 年 3 月 18 日),作者:Tao Klerks (
TaoK
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 9d8370d,2023 年 4 月 17 日)git config
现在包含在其 手册页:git config
现在包含在其 手册页:git difftool
现在包含在其 手册页:git mergetool
现在包含在其 手册页:例子:
Compare to my 2009 answer, the scripts (like
git-mergetool--lib.sh
) have changed With Git 2.41 (Q2 2023):"
git mergetool
"(man) andgit difftool
(man) learns a new configurationguiDefault
to optionally favor configured guitool over non-gui-tool automatically when$DISPLAY
is set.See commit 42943b9 (18 Mar 2023) by Tao Klerks (
TaoK
).(Merged by Junio C Hamano --
gitster
-- in commit 9d8370d, 17 Apr 2023)git config
now includes in its man page:git config
now includes in its man page:git difftool
now includes in its man page:git mergetool
now includes in its man page:Example: