Git on Windows: Как настроить mergetool?



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



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

710   18  

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"

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

мне пришлось отказаться от дополнительного цитирования с помощью 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 = ideamerge

Msys

[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 = ideamerge

the ~/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

    Ничего не найдено.