Как настроить kdiff3 вместо emerge как git mergetool?

У меня есть Git на Mac OSX Snow Leopard, и я попытался отредактировать инструмент слияния и сравнения, чтобы использовать kdiff3 вместо emerge.

Но когда я пытаюсь использовать его, он не запускает графический интерфейс kdiff и поддерживает меня интерфейсом на основе cmd.

Мои настройки в gitconfig:

[merge]
     tool = kdiff3
[mergetool "kdiff3"]
    cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
    args = $base $local $other -o $output
    trustExitCode = false
[diff]
tool = kdiff3
[difftool "kdiff3"]
cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
args = $base $local $other -o $output
trustExitCode = false

Очевидно, чего-то не хватает, но что я сделал не так?

2 ответа

Решение

Последние версии Git имеют встроенную поддержку kdiff3, поэтому нет необходимости настраивать его вручную, используя общие параметры cmd и args. Вместо этого сделайте:

$ git config --global merge.tool kdiff3

И если kdiff3 не в вашей среде PATH также выполните:

$ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3

Это делает git mergetool запуск kdiff3, Обратите внимание, что нет способа настроить Git для автоматического запуска инструмента слияния после слияния вручную, которое имеет конфликты.

Если вы действительно хотите увидеть, как Git звонит kdiff3 внутренне взгляните на встроенную конфигурацию mergetool для kdiff3.

Изменить: Для Beyond Compare 4, который теперь также поддерживает Mac OS X, просто поменяйте kdiff3 с bc3 (да, "3") и отрегулируйте путь в вышеуказанных строках. Начиная с Git 2.2.0 вы сможете использовать bc как псевдоним для bc3 так что вам не нужно заботиться о номере версии.

Последние версии Git имеют встроенную поддержку kdiff3

Да, но только Git 2.12 (Q1 2017) позволит этим встроенным инструментам доверять своему коду выхода.

Смотрите коммит 2967284, коммит 7c10605 (29 ноября 2016 г.) Дэвида Агилара ( davvid )
(Объединено Юнио С Хамано - gitster - в коммите c4a44e2, 16 декабря 2016 г.)

mergetool: честь mergetool.$tool.trustExitCode для встроенных инструментов

Встроенные инструменты слияния содержат жестко заданное предположение о том, можно ли доверять коду выхода инструмента, чтобы определить успех или неудачу слияния.
Инструменты, коды выхода которых не являются доверенными, содержат вызовы check_unchanged() в их merge_cmd() функции.

Проблема в том, что конфигурация trustExitCode не учитывается для встроенных инструментов.

Научите встроенные инструменты, чтобы почтить trustExitCode конфигурации.

(Увидеть kdiff3)

простираться run_merge_cmd() так что он отвечает за вызов check_unchanged() когда код выхода инструмента нельзя доверять.
Удалить check_unchanged() звонки из скриптлетов, так как они больше не несут ответственности за его вызовы.

Другие вопросы по тегам