Как использовать другой инструмент слияния и сравнения в git?

Я предпочитаю использовать meld в качестве инструмента сравнения. Однако у него нет возможности быстро решить все простые конфликты, поэтому в случае слияния я бы хотел использовать kdiff3.

Я установил merge.tool на kdiff3 и diff.guitool на объединение, но git difftool по-прежнему всегда запускал kdiff3

[merge]
        tool = kdiff3
        conflictstyle = diff3

[diff]
        guitool = meld
        renames = copies
        mnemonicPrefix = true

[difftool]
        prompt = false

Как заставить git difftool запускать meld?


person phuclv    schedule 14.09.2017    source источник
comment
Не используйте kdiff3. Он пытается автоматически разрешать простые конфликты, иногда полностью портя код без предупреждения.   -  person Claudio    schedule 14.09.2017
comment
@Клаудио правда? Я не так много использовал kdiff3, но это действительно помогает во время слияния.   -  person phuclv    schedule 15.09.2017
comment
Да. Однажды он добавил мой код вне какой-либо функции, утверждая, что автоматически разрешил конфликт. Следующим моим шагом было удаление инструмента. Meld не претендует на то, чтобы быть таким умным, но, по крайней мере, не портит мой код.   -  person Claudio    schedule 15.09.2017


Ответы (2)


diff.guitool применяется, только если вы используете флаг --gui.

Установка diff.tool и merge.tool должна заставить git difftool и git mergetool использовать разные инструменты:

[merge]
        tool = kdiff3

[diff]
        tool = meld
person Chris    schedule 14.09.2017

Примечание: начиная с Git 2.22 (второй квартал 2019 г.) комбинации {diff,merge}.{tool,guitool} переменных конфигурации служат резервными настройками друг друга в разумном порядке.

См. коммит 6c22d71, коммит 7f978d7, , коммит 884630b, коммит 05fb872 (29 апреля 2019 г.) и commit 57d93c1, commit e9d309e (24 апреля 2019 г.) Дентон Лю (Denton-L).
(объединено Хунио С. Хамано -- gitster -- в commit 85ac27e, 19 мая 2019 г.)

В вашем случае, поскольку difftool не определен:

difftool: запасной вариант merge.guitool

В git-difftool.txt говорится

'git difftool' возвращается к переменным конфигурации 'git mergetool', когда эквиваленты difftool не определены.

Однако, когда diff.guitool отсутствует, он ни к чему не возвращается. Сделать git-difftool резервным на merge.guitool, когда diff.guitool отсутствует.

Документация теперь включает:

git difftool -g/--gui

Когда 'git difftool' вызывается с параметром -g или --gui, инструмент сравнения по умолчанию будет считываться из настроенной переменной diff.guitool вместо diff.tool.
Параметр --no-gui можно использовать для переопределения этого параметра.

Если diff.guitool не установлен, мы будем отступать в порядке merge.guitool, diff.tool, merge.tool, пока инструмент не будет найден.

person VonC    schedule 19.05.2019