Git на Windows: как настроить mergetool? - PullRequest
331 голосов
/ 09 января 2009

Я пробовал msysGit и Git на Cygwin. Оба прекрасно работают сами по себе, и оба прекрасно работают с gitk и git-gui.

Теперь, как, черт возьми, я могу настроить mergetool? (Vimdiff работает на Cygwin, но желательно, чтобы некоторые из наших коллег, любящих Windows, хотели бы что-то более удобное для пользователя.)

Ответы [ 18 ]

294 голосов
/ 12 января 2009

Чтобы проконтролировать ответ Чарльза Бэйли, вот моя настройка git, использующая p4merge (бесплатный кроссплатформенный инструмент 3way merge); протестировано на msys Git (Windows) установка:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

или из оболочки Windows cmd.exe вторая строка:

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

Изменения (по отношению к Чарльзу Бейли):

  • добавлено в глобальный git config, то есть действительно для всех проектов git, а не только для текущего
  • значение конфигурации пользовательского инструмента находится в "mergetool. [Tool] .cmd", а не в "merge. [Tool] .cmd" (глупый я, потратил час на устранение неполадок, почему git продолжал жаловаться на несуществующий инструмент)
  • добавлены двойные кавычки для всех имен файлов, чтобы файлы с пробелами все еще можно было найти с помощью инструмента слияния (я проверял это в msys Git из Powershell)
  • обратите внимание, что по умолчанию Perforce добавит каталог установки в PATH, поэтому нет необходимости указывать полный путь к p4merge в команде

Скачать: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


РЕДАКТИРОВАТЬ (февраль 2014 г.)

Как указывает @ Gregory Pakosz , последний msys git теперь "изначально" поддерживает p4merge (протестировано на 1.8.5.2.msysgit. 0 ).

Вы можете отобразить список поддерживаемых инструментов, выполнив:

git mergetool --tool-help

Вы должны увидеть p4merge в списке доступный или действительный . Если нет, пожалуйста, обновите ваш git.

Если p4merge был указан как доступен , он находится в вашем PATH , и вам нужно только установить merge.tool :

git config --global merge.tool p4merge

Если он был указан как действительный , вам необходимо определить mergetool.p4merge.path в дополнение к merge.tool :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • Выше приведен пример пути, когда p4merge был установлен для текущего пользователя, а не для всей системы (не требует прав администратора или повышения UAC)
  • Хотя ~ должен расширяться до домашнего каталога текущего пользователя (поэтому теоретически путь должен быть ~/AppData/Local/Perforce/p4merge.exe), это не сработало для меня
  • Еще лучше было бы воспользоваться преимуществами переменной окружения (например, $LOCALAPPDATA/Perforce/p4merge.exe), git, похоже, не расширяет переменные окружения для путей (если вы знаете, как это работает, пожалуйста, дайте мне знать или обновите это ответить)
87 голосов
/ 24 марта 2012

настройка mergetool.p4merge.cmd больше не будет работать, так как Git начал пытаться поддерживать p4merge, см. Libexec / git-core / git-mergetool--lib.so нам просто нужно указать путь mergetool для git, например p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

Тогда это будет работать.

58 голосов
/ 03 апреля 2011

Я использую Portable Git на WinXP (работает угощение!), И мне нужно было разрешить конфликт, возникший при ветвлении. Из всех проверенных мной графических интерфейсов KDiff3 оказался наиболее прозрачным для использования.

Но я нашел инструкции, которые мне нужны для работы в Windows, в этом посте , инструкции, которые немного отличаются от других подходов, перечисленных здесь. В основном это означало добавление этих строк в мой .gitconfig файл:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

Хорошо работает сейчас!

20 голосов
/ 11 ноября 2010

Под Cygwin, что only работает для меня так:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

Также мне нравится отключать сообщение для difftool:

git config --global difftool.prompt false
16 голосов
/ 09 января 2009

git mergetool полностью настраивается, так что вы можете в значительной степени выбрать свой любимый инструмент.

Полная документация здесь: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

Вкратце, вы можете установить mergetool по умолчанию, установив переменную конфигурации пользователя merge.tool.

Если инструмент слияния является одним из тех, которые поддерживаются им изначально, вам просто нужно установить mergetool.<tool>.path на полный путь к инструменту (замените <tool> на то, что вы настроили merge.tool на.

В противном случае вы можете установить mergetool.<tool>.cmd в бит оболочки, который будет оцениваться во время выполнения, с переменными оболочки $BASE, $LOCAL, $REMOTE, $MERGED, установленными в соответствующие файлы. Вы должны быть осторожны с экранированием, независимо от того, редактируете ли вы файл конфигурации напрямую или устанавливаете переменную с помощью команды git config.

Нечто подобное должно дать представление о том, что вы можете сделать («mymerge» - вымышленный инструмент).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

После того, как вы настроили ваш любимый инструмент слияния, вам нужно просто запустить git mergetool всякий раз, когда вам нужно разрешить конфликты.

Инструмент p4merge от Perforce является довольно хорошим автономным инструментом слияния.

6 голосов
/ 11 июня 2013

Кажется, что новые версии git поддерживают p4merge напрямую, поэтому

git config --global merge.tool p4merge

должно быть все, что вам нужно, если p4merge.exe находится на вашем пути. Нет необходимости устанавливать cmd или путь.

6 голосов
/ 25 марта 2014

Для сравнения на Windows 7

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
5 голосов
/ 09 января 2009

Как уже ответили здесь (и здесь и здесь ), mergetool - команда для настройки этого. Для хорошего графического интерфейса я рекомендую kdiff3 (GPL).

4 голосов
/ 02 августа 2009

Мне пришлось отказаться от лишних цитат, используя msysGit на Windows 7, не знаю почему.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
3 голосов
/ 13 января 2011

Бах, это наконец сработало для меня (Windows 7 + Cygwin + TortoiseMerge):

В .git / config:

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

Спасибо предыдущим постерам за подсказку по использованию cygpath!

...