Git on Windows: Как настроить mergetool?
Я пробовал msysGit и Git на Cygwin. Оба работают просто отлично сами по себе, и оба отлично работают с gitk и Git-gui.
теперь как, черт возьми, я могу настроить mergetool? (Vimdiff работает на Cygwin, но предпочтительно я хотел бы что-то более удобное для некоторых из наших сотрудников, любящих Windows.)
18 ответов:
чтобы следить за ответом Чарльза Бейли, вот моя настройка git, которая использует p4merge (бесплатный кросс-платформенный инструмент слияния 3 исхода); испытания на префикса msys ЖКТ (для Windows) установите:
git config --global merge.tool p4merge git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'или из командлета windows.exe оболочка, вторая строка становится:
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""изменения (относительно Чарльза Бейли):
- добавлен в глобальную конфигурацию git, т. е. действителен для всех проектов git, а не только для текущего
- конфигурация пользовательского инструмента значение находится в "mergetool.[инструмент.]cmd", а не " слияние.[инструмент.]cmd "(глупый я, потратил час на устранение неполадок, почему git продолжал жаловаться на несуществующий инструмент)
- добавлены двойные кавычки для всех имен файлов, чтобы файлы с пробелами все еще можно было найти с помощью инструмента слияния (я тестировал это в msys Git из Powershell)
- обратите внимание, что по умолчанию Perforce добавит свой установочный dir в PATH, поэтому нет необходимости указывать полный путь к p4merge в команда
скачать: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
EDIT (февраль 2014)
как указал @Gregory Pakosz, последний msys git теперь "нативно" поддерживает p4merge (проверено на 1.8.5.2.msysgit.0).
вы можете отобразить список поддерживаемых инструментов с помощью работает:
git mergetool --tool-helpвы должны увидеть p4merge либо скачать или действительный список. Если нет, пожалуйста, обновите свой git.
если p4merge значится как скачать, это в ваш путь и вам нужно только установить слияние.инструмент:
git config --global merge.tool p4mergeесли он был указан как действительный, вы должны определить mergetool.p4merge.путь in дополнение к слияние.инструмент:
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 не кажется чтобы расширить переменные среды для путей (если вы знаете, как заставить это работать, пожалуйста, дайте мне знать или обновить этот ответ)
настройки mergetool.p4merge.cmd больше не будет работать, так как Git начал пытаться поддерживать p4merge, см. libexec/git-core / git-mergetool--lib. поэтому нам просто нужно указать путь mergetool для git,например p4merge:
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe' git config --global merge.tool p4mergeтогда это будет работать.
Я использую портативный Git на WinXP (работает удовольствие!), и нужно было решить конфликт, который возник в ветвлении. Из всех gui я проверил,KDiff3 оказался самым прозрачным в использовании.
но я нашел инструкции, которые мне нужны, чтобы заставить его работать в Windows в этот блог, инструкции, которые немного отличаются от других подходов, перечисленных здесь. Это в основном сводилось к добавлению этих строк в мой
.gitconfigфайл:[merge] tool = kdiff3 [mergetool "kdiff3"] path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe keepBackup = false trustExitCode = falseработает хорошо сейчас!
под Cygwin, the только вещь, которая работала для меня является следующее:
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
git mergetoolполностью настраивается, так что вы можете в значительной степени выбрать свой любимый инструмент.полная документация здесь:http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
короче говоря, вы можете установить mergetool по умолчанию, установив переменную конфигурации пользователя
merge.tool.если инструмент слияния является одним из тех, которые поддерживаются изначально им, вам просто нужно установить
mergetool.<tool>.pathк полному пути к инструменту (заменить<tool>by то, что вы настроилиmerge.toolбыть.в противном случае, вы можете установить
mergetool.<tool>.cmdнемного оболочки, которая будет оценена во время выполнения с переменными оболочки$BASE, $LOCAL, $REMOTE, $MERGEDустановите соответствующие файлы. Вы должны быть немного осторожны с экранированием, если вы непосредственно редактируете файл конфигурации или устанавливаете переменную с помощью .что-то вроде этого должно дать аромат того, что вы можете сделать ("mymerge" - это вымышленный инструмент).
git config merge.tool mymerge git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'после установки ваш любимый инструмент слияния, это просто вопрос работает
git mergetoolкогда у вас есть конфликты разрешать.инструмент p4merge от Perforce-это довольно хороший автономный инструмент слияния.
Кажется, что новые версии git поддерживают p4merge напрямую, поэтому
git config --global merge.tool p4mergeдолжно быть все, что вам нужно, если p4merge.ехе на вашем пути. Нет необходимости настраивать cmd или путь.
Для вне сравнения на Windows 7
git config --global merge.tool bc3 git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
мне пришлось отказаться от дополнительного цитирования с помощью msysGit на windows 7, Не знаю почему.
git config --global merge.tool p4merge git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
Если вы делаете это через cygwin, вам может потребоваться использовать cygpath:
git config --global merge.tool p4merge git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'
Ба, да это наконец-то работал для меня (Windows 7 + Cygwin + TortoiseMerge):
In .git / config:
cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")благодаря предыдущим плакатам для подсказки, чтобы использовать cygpath!
Я использую приложение под названием WinMerge ( http://winmerge.org/ ) информация из их руководства (http://manual.winmerge.org/CommandLine.html)
это сценарий bash, который я использую из
Я нашел два способа, чтобы настроить "SourceGear DiffMerge " как difftool и mergetool в окнах github.
следующие команды в окне командной строки будет обновить .gitconfig для настройки GIT используйте DiffMerge:
git config --global diff.tool diffmerge git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"' git config --global merge.tool diffmerge git config --global mergetool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'[или]
добавьте следующие строки .gitconfig. Этот файл должен быть в вашем домашнем каталоге в C:\Users\UserName:
[diff] tool = diffmerge [difftool "diffmerge"] cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" [merge] tool = diffmerge [mergetool "diffmerge"] trustExitCode = true cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
вы можете добавить эти параметры тоже:
git config --global merge.tool p4mergetool git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED' git config --global mergetool.p4mergetool.trustExitCode false git config --global mergetool.keepBackup falseкроме того, я не знаю, почему, но цитирование и Слэш из ответа Милана Гардиана испортили мне все.
Если кто-то хочет использовать gvim в качестве своего инструмента diff на TortoiseGit, то это то, что вам нужно ввести в текстовый ввод для пути к внешнему инструменту diff:
path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
для IntelliJ IDEA (Community Edition) 3-полосная конфигурация git mergetool в среде Windows (
~/.gitconfig)программа
[mergetool "ideamerge"] cmd = C:/Program\ Files\ \(x86\)/JetBrains/IntelliJ\ IDEA\ Community\ Edition\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED` [merge] tool = ideamergeMsys
[mergetool "ideamerge"] cmd = "/c/Program\ Files\ \(x86\)/JetBrains/IntelliJ\ IDEA\ Community\ Edition\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED` [merge] tool = ideamergethe ~/winpath.sh это конвертировать пути к Windows на msys и берется из вопрос преобразования пути msys на stackoverflow
#! /bin/sh function wpath { if [ -z "" ]; then echo "$@" else if [ -f "" ]; then local dir=$(dirname "") local fn=$(basename "") echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\|g'; else if [ -d "" ]; then echo "$(cd ""; pwd -W)" | sed 's|/|\|g'; else echo "" | sed 's|^/\(.\)/|:\|g; s|/|\|g'; fi fi fi } wpath "$@"
чтобы настроить p4merge, установленный с помощью chocolatey на windows для слияния и diff, посмотрите здесь: https://gist.github.com/CamW/88e95ea8d9f0786d746a
Если у вас возникли проблемы с открытием p4merge из SourceTree найдите файл локальной конфигурации с именем config под MyRepo.git и удалить любую конфигурацию слияния. В моем случае он пытался открыть Meld, который я только что удалил
Comments