在Git 2.22.0(于2019-06-08发布)的https://stackoverflow.com/a/56212234中,根据@VonC的回答,对git difftool
命令的配置方式进行了许多更改。
但是,除非我在此处缺少任何内容,否则似乎在此版本中引入了功能回归。在以前的版本(包括2.21.0)中,可以在没有任何配置或CLI选项的情况下使用git difftool
,在这种情况下,它会传递到git diff
。
现在在Git 2.22.0中,如果我在未配置git difftool
或diff.tool
的情况下使用merge.tool
,则会收到以下消息:
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
是否有任何方法可以绕过此错误并返回传递到git diff
的旧行为?还是我必须直接致电git diff
?
编辑:根据Jeff King的mailing list reply,这种新行为是故意的。但是在git-difftool documentation的顶部,它说:
git difftool 是 git diff 的前端,并接受相同的选项和参数。参见git-diff[1]。
不再是这种情况吗?
答案 0 :(得分:2)
TLDR;新的错误消息“ This message is displayed because 'diff.tool' is not configured.
”可能是实际的错误修复,而不是是新的错误。
我只是尝试了......没有收到任何错误消息(当使用不带参数时)。
vonc@vonvb:~/git/cplgit/linux$ ./set_git 2.22.0
git set to v2.22.0
vonc@vonvb:~/git/cplgit/linux$ git version
git version 2.22.0
vonc@vonvb:~/git/cplgit/linux$ git config -l|grep -i tool
vonc@vonvb:~/git/cplgit/linux$ git difftool
此外,此错误消息已在commit 5338a6a, Jan. 2013, Git v1.8.2-rc0中引入。
我确实提到了commit 05fb872 from Git 2.22,它使用了${GIT_MERGETOOL_GUI}
。
我的机器上未设置该环境变量,并且没有收到任何错误消息。
检查您自己的git config
和环境变量。
我确实在Git 2.22中看到以下错误消息:
vonc@vonvb:~/gits/src/git$ git difftool --no-index color.c color.h
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:
meld opendiff kdiff3 tkdiff xxdiff kompare gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare smerge emerge vimdiff
Viewing (1/1): 'color.c'
Launch 'bc' [Y/n]?
The diff tool bc is not available as 'bcompare'
fatal: external diff died, stopping at color.c
在Git 2.21.0中,它确实默认为常规git diff
:
vonc@vonvb:~/git/cplgit/linux$ ./set_git 2.21.0
git set to v2.21.0
vonc@vonvb:~/git/cplgit/linux$ git version
git version 2.21.0
vonc@vonvb:~/git/cplgit/linux$ cdgg
vonc@vonvb:~/gits/src/git$ git difftool --no-index color.c color.h
diff --git a/color.c b/color.h
index ebb222ec33..98894d6a17 100644
Denton Liu 通过commit 287ab28定位原始Jeff King (peff
)(2019年2月16日)。
(由Junio C Hamano -- gitster
--在commit 12e5bdd中合并,2019年3月7日)
diff
:针对--no-index
情况重复使用差异设置当“
--no-index
”有效(或由参数暗示)时,git-diff
提早跳转到特殊的代码路径来执行该差异。
这意味着我们会错过某些设置,例如默认启用--ext-diff
和--textconv
。
我对
git-difftool
的工作方式了解不多,但是看起来 设置GIT_EXTERNAL_DIFF=git-difftool--helper
。在287ab28bfa之前,我们不会考虑任何外部差异 运行
git-diff
时的命令。但是之后,我们照做。如果用户未提供
--no-index
,则全部 我猜想difftool
的作用是:运行帮助程序并说“嘿, 您尚未配置它”。似乎上述命令在287ab28bfa之前的行为是 不是故意的。
它会运行git-diff
,期望它会触发帮助程序,但它从没有执行(而是执行了常规的no-index diff
)。因此,看来新行为实际上是正确的选择,因为它使
--no-index
情况与常规情况保持一致?
我不清楚您为什么不在此处运行“difftool
” 配置,而您只需要直接的diff
输出。