Как настроить kdiff3 вместо emerge как git mergetool? - PullRequest
50 голосов
/ 19 марта 2012

У меня есть 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 ]

132 голосов
/ 16 января 2013

Последние версии 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, так что вам не нужно заботиться о номере версии.

1 голос
/ 23 декабря 2016

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

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

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

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

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

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

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

(см. kdiff3)

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

...