Git: как настроить KDiff3 как инструмент слияния и инструмент сравнения
Недавно я использовал GitExtension 2.46, но версия Git, которая имеет то же самое, - 1.9.4.msysgit.2. Желая использовать только команды Git, я удалил GitExtension и установил последнюю версию, доступную Git и KDiff3.
Когда я делаю слияние и конфликты, я запускаю следующую команду:
$ git mergetool
Затем я получаю сообщение:
Инструмент слияния kdiff3 недоступен как "kdiff3".
Я предполагаю, что это должен быть путь KDiff3.
Окружающая среда
- ОС: Windows 10
- Git 2.6.1.windows.1
- KDiff3 0.9.98 (64 бит)
Вопросы:
-
Что мне нужно настроить в файле .gitconfig для команды $ git mergetool
, чтобы открыть графический интерфейс KDiff3 с версиями LOCAL, REMOTE, BASE и MERGED конфликтующего файла?
-
Как настроить его на использование с помощью diff-инструмента?
Ответы
Ответ 1
Эти сайты были очень полезны, почти, mergetool и difftool. Я использовал глобальную конфигурацию, но без проблем могу использовать репозиторий. Вам просто нужно выполнить следующие команды:
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false
Использование параметра trustExitCode
зависит от того, что вы хотите сделать, когда инструмент diff возвращается. Из документация:
git -difftool вызывает отдельный инструмент для каждого файла. Ошибки, о которых сообщает инструмент diff, по умолчанию игнорируются. Используйте - trust-exit-code, чтобы сделать вывод git -difftool, когда вызванный инструмент diff возвращает ненулевой код выхода.
Ответ 2
Просто чтобы увеличить ответ @Joseph:
После применения этих команд ваш глобальный файл .gitconfig
будет иметь следующие строки (чтобы ускорить процесс, вы можете просто скопировать их в файл):
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/Program Files/KDiff3/kdiff3.exe
trustExitCode = false
[diff]
guitool = kdiff3
[difftool "kdiff3"]
path = C:/Program Files/KDiff3/kdiff3.exe
trustExitCode = false
Ответ 3
Для пользователей Mac
Вот ответ @Joseph принятый, но с расположением пути установки Mac по умолчанию kdiff3
(Обратите внимание, что вы можете скопировать и вставить это и запустить его за один раз)
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false
Ответ 4
Проблема в том, что Git не может найти KDiff3 в% PATH%.
В типичной установке Unix все исполняемые файлы находятся в нескольких известных местах (/bin/
, /usr/bin/
, /usr/local/bin/
и т.д.), И можно вызвать программу, просто набрав ее имя в процессор оболочки (например, cmd.exe
:)).
В Microsoft Windows программы обычно устанавливаются по выделенным путям, поэтому вы не можете просто ввести kdiff3
в сеансе cmd
и запустить KDiff3.
Трудное решение: вы должны указать Git, где найти KDiff3, указав полный путь к kdiff3.exe
. К сожалению, Git не любит пробелы в спецификации пути в его конфигурации, поэтому в прошлый раз, когда мне это понадобилось, я закончил тем древним "C:\Progra ~ 1...\kdiff3.exe", как будто было поздно 1990-е годы :)
Простое решение: отредактируйте настройки вашего компьютера и включите каталог с kdiff3.exe в% PATH%. Затем проверьте, можете ли вы вызвать его из cmd.exe по его имени, а затем запустите Git.
Ответ 5
Мне нужно было добавить параметры командной строки, иначе KDiff3 откроется только без файлов и запросит у меня базовый, локальный и удаленный. Я использовал версию, поставляемую с TortoiseHg.
Кроме того, мне нужно было обратиться к старым добрым именам файлов DOS 8.3.
[merge]
tool = kdiff3
[mergetool "kdiff3"]
cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED
Однако теперь он работает правильно.
Ответ 6
Чтобы изменить ответ kris, начиная с Git 2.20 (Q4 2018), правильной командой для git mergetool
будет
git config --global merge.guitool kdiff3
Это потому, что " git mergetool
" научился использовать опцию " --[no-]gui
", как git difftool
делает " git difftool
".
См. Коммит c217b93, коммит 57ba181, коммит 063f2bd (24 октября 2018 г.) Дентона Лю (Denton-L
).
(Объединено Джунио С. Хамано - gitster
- в коммите 87c15d1, 30 октября 2018 г.)
mergetool
: принять -g / --[no-]gui
качестве аргументов
В соответствии с тем, как difftool
принимает параметр difftool
-g / --[no-]gui
mergetool
принять тот же параметр, чтобы использовать переменную merge.guitool
для поиска по умолчанию mergetool вместо merge.tool
.
Ответ 7
(Когда я пытался выяснить, как использовать kdiff3 из WSL git, я попал сюда и получил последние фрагменты, поэтому я опубликую свое решение для всех, кто также спотыкается здесь, пытаясь найти этот ответ)
Как использовать kdiff3 в качестве инструмента сравнения/слияния для WSL git
С обновлением Windows 1903 это стало намного проще; просто используйте wslpath, и вам не нужно совместно использовать TMP из Windows в WSL, так как сторона Windows теперь имеет доступ к файловой системе WSL через \wsl $:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
# Unix style paths must be converted to windows path style
cmd = kdiff3.exe \"'wslpath -w $LOCAL'\" \"'wslpath -w $REMOTE'\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
До обновления Windows 1903
Действия по использованию kdiff3, установленного в Windows 10, в качестве инструмента сравнения/слияния для git в WSL:
- Добавьте каталог установки kdiff3 в путь Windows.
- Добавьте TMP в переменную среды WSLENV Windows (WSLENV = TMP/up). Директория TMP будет использоваться git для временных файлов, как и предыдущие версии файлов, поэтому для работы этого файла необходимо указать путь в файловой системе Windows.
- Установите TMPDIR в TMP в .bashrc:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
- Преобразуйте unix-path в windows-path при вызове kdiff3. Пример моего .gitconfig:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
#path = kdiff3.exe
# Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
cmd = kdiff3.exe \"'echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_''\" \"'echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_''\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
Ответ 8
Я только что установил KDiff3.exe в каталог C:\Program Files\KDiff3
и это решило мою проблему.