Git (2.22.0) difftool больше не проходит через git diff, если diff.tool не установлен - PullRequest
1 голос
/ 20 июня 2019

В ответе @ VonC в https://stackoverflow.com/a/56212234 в Git 2.22.0 (выпущен в 2019-06-08) в команду git difftool был внесен ряд изменений, касающихся определения его конфигурации.

Однако, если я что-то здесь не упустил, похоже, что в этой версии был введен регресс в функциональности.В предыдущих версиях, включая 2.21.0, было возможно использовать git difftool без какой-либо конфигурации или параметров CLI, и в этом случае он переходит к 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 напрямую?

edit: Согласно ответу списка рассылки Джеффа Кинга , новое поведение является преднамеренным.Однако в верхней части документации git-difftool написано, что:

git difftool является внешним интерфейсом для git diff и принимает те же параметры и аргументы.См. git-diff [1] .

Это уже не так?

1 Ответ

2 голосов
/ 20 июня 2019

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, январь 2013 г., Git v1.8.2-rc0 .
Я упоминал commit 05fb872 из 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 :

Дентон Лю определяет оригинал коммит 287ab28 (16 февраля 2019 г.) Джефф Кинг (peff) .
(Объединено Junio ​​C Hamano - gitster - in commit 12e5bdd , 07 Mar 2019)

diff: повторно использовать настройку diff для --no-index case

Когда действует «--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 выход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...