2010-03-18 2 views
45

Я использую Git Extensions, и он предварительно устанавливает и устанавливает KDiff в качестве инструмента diff для разрешения конфликтов слияния. Я очень люблю Winmerge и хотел бы заменить KDiff на Winmerge.Как использовать Winmerge с расширениями Git?

В настройках Git Extensions есть настройки для изменения Mergetool, но я не могу понять, какой синтаксис я должен использовать и почему. Кажется, есть 4 переменные: $ BASE, $ LOCAL, $ REMOTE, $ MERGED. Кажется, что я должен передать их в WinMergeU.exe, но с какими параметрами командной строки?

Я пытался найти это несколько раз, но нет ответа, который, по-видимому, работает.

+2

Будет http://stackoverflow.com/questions/255202/how-do-i-view-git-diff-output-with-visual-diff-program/949242#949242 или http://stackoverflow.com/ вопросы/1881594/use-winmerge-inside-of-git-to-file-diff/1884517 # 1884517 help? – VonC

+1

Посмотрите мой ответ на самое легкое, точечное решение –

ответ

43

Обзор
Ниже инструкция по настройке GIT управления версиями, так что вы можете использовать лучший набор инструментов, чем установки по умолчанию. Для установки требуется, чтобы GIT-расширения уже были установлены и включали настройку Winmerge в расширениях GIT.

Установка
Прогулка по всем подсказкам и установить в папку по умолчанию для Winmerge.

Настройка Winmerge в GIT управления версиями
Откройте новый документ в текстовом редакторе. Скопируйте/вставьте следующее и сохраните документ как «wMerge.sh» в папку «C: \ Program Files (x86) \ Git \ bin \».

echo Launching WinMerge: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -dl "Original" -dr "Modified" "$1" "$2" 

Перейдите в каталог «Пользователи-> имя пользователя» и найдите файл .gitconfig. Откройте его в своем любимом редакторе копировать/вставить следующий код и сохранить:

[user] 
    name = enter your name 
    email = [email protected] 
[core] 
    autocrlf = false 
[merge] 
    tool = winmerge 
[mergetool "winmerge"] 
    cmd = wMerge.sh \"$MERGED\" \"$REMOTE\" 
    path = c:/Program Files (x86)/winmerge/winmergeu.exe 
[mergetool] 
    keepBackup = false 
    trustExitCode = false 
[diff] 
    guitool = winmerge 
[difftool "winmerge"] 
    path = c:/Program Files (x86)/winmerge/winmergeu.exe 
    cmd = \"c:/Program Files (x86)/winmerge/winmergeu.exe\" \"$LOCAL\" \"$REMOTE\" 

Run "GitExtensions", Гото "Инструменты-> Настройки-> Git Extensions-> Git Config". Если вы правильно выполнили свою установку и указали инструменты в свой каталог, ваша страница глобальных настроек должна выглядеть ниже (ПРИМЕЧАНИЕ. Пожалуйста, введите свое имя по имени и электронной почте):

mergetool: winmerge
путь к объединению: команда c:/Program Files (x86)/winmerge/winmergeu.exe
mergetool: wMerge.sh "$MERGED" "$REMOTE"
difftool: winmerge
путь к difftool: c:/Program Files (x86)/winmerge/winmergeu.exe
команда difftool: "c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

линия окончаний: контроль как есть, совершить как есть

Перейдите на вкладку контрольного списка, чтобы убедиться, что GIT является «зеленым» и удовлетворен вашей настройкой.

+0

понравилось так, как вы все обо всем ясно – Kiarash

+0

Я поместил wMerge.sh в/Git/bin /, но я получаю это:/mingw64/libexec/git-core/git-mergetool - lib: строка 133: wMerge.sh: команда не найдена –

8

@ ответ Sebastiaan не работал для меня (может быть, устарела?)

Эти «глобальные настройки», которые работают для меня, используя GitExtensions 2,28:

Mergetool: winmerge
Путь к mergetool : D:/path/to/WinMerge/WinMergeU.exe
Команда Mergetool: "D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
Это приводит к тому, что WinMerge использует «файл конфликта», сгенерированный git.
-e позволяет нажать ESC, чтобы закрыть winmerge.

Difftool: winmerge
Путь к difftool: D:/path/to/WinMerge/WinMergeU.exe
команда Difftool: "D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dl и -dr набор описаний для левой и правой панели.

+0

это сработало для меня – ranthonissen

+0

Это правильный ответ ... проблема в том, что настройки GitExtensions по умолчанию для WinMerge не включали «-dl», Локальный "-dr" Удаленный "". Благодаря! –

3

Добавить или изменить следующие в конфигурационном файле:

[merge] 
    tool = winmerge 
[mergetool "winmerge"] 
    cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED" 

Это решение отличается двумя способами:

  1. Просто вызывает WinMergeU.exe *conflictfile*, в то время как две односторонние вызовы страдают от того, что левое окно представляет <<<<<<<, ======= и >>>>>>> маркеры, которые содержат $ MERGED.
  2. Применить mergetool по принципу per-repo - я редактирую файл $ GIT_DIR/config. Тот же результат может быть достигнут путем вызова git config без аргументов --system или --global. Это необходимо отметить, что есть a few scopes of configuration to choose from.

Переменная $ PROGRAMFILES поддерживается git bash и (в отличие от аналогичной переменной на родных окнах cmd) она переходит к «Program Files (x86)».

+0

Я не думаю, что здесь требуется $ PWD. Этот ответ отлично работает для меня без него. – robertpateii

10

На окнах 7 это то, что, наконец, сработало для меня. Обратите внимание, что "'c:/path/here'" цитирует мой путь к файлам программ.

[merge] 
    tool = winmerge 
[mergetool "winmerge"] 
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$MERGED" 
[diff] 
    tool = winmerge 
[difftool "winmerge"] 
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE" -dl "Local" -dr 
+0

Это сработало для меня тоже в Windows 7. Спасибо :) –

+0

Это решило мою проблему для Windows 10 Visual Studio 2015. Спасибо! –

17

на Git Extensions v2.47.3, это очень легко установить это:

Настройки -> Общие настройки -> в раскрывающемся списке для «» Mergetool записи вручную: WinMerge и наблюдать чудо ,

То же самое для раскрывающегося «Difftool».

enter image description here

|| || || 
\/ \/ \/ 

enter image description here

Это просто глупо, что вариант на '' Winmerge предварительно не заполняется в выпадающем списке. Ну что ж.

+3

Это работало для меня как шарм :) –

+1

Это самое простое решение :) –

Смежные вопросы