如果未设置diff.tool,则Git(2.22.0)difftool不再通过git diff

时间:2019-06-19 21:08:14

标签: git git-difftool

在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 difftooldiff.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]

不再是这种情况吗?

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

来自OP Git mailing list thread

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

Jeff King replies

  

我对git-difftool的工作方式了解不多,但是看起来   设置GIT_EXTERNAL_DIFF=git-difftool--helper

     

287ab28bfa之前,我们不会考虑任何外部差异   运行git-diff时的命令。但是之后,我们照做。

     

如果用户未提供--no-index,则全部   我猜想difftool的作用是:运行帮助程序并说“嘿,   您尚未配置它”。

     

似乎上述命令在287ab28bfa之前的行为是   不是故意的。
  它会运行git-diff,期望它会触发帮助程序,但它从没有执行(而是执行了常规的no-index diff)。

     

因此,看来新行为实际上是正确的选择,因为它使--no-index情况与常规情况保持一致?
  我不清楚您为什么不在此处运行“ difftool”   配置,而您只需要直接的diff输出。