Как использовать Winmerge с расширениями Git?

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

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

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

5 ответов

Решение

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

Монтаж
Просмотрите все запросы и установите их в каталог по умолчанию для Winmerge.

Настройте Winmerge в GIT Version Control
Откройте новый документ в текстовом редакторе. Скопируйте / вставьте следующее и сохраните документ как "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"

Перейдите в каталог "Users->username" и найдите файл.gitconfig. Откройте его в своем любимом редакторе, скопируйте / вставьте следующий код и сохраните:

[user]
    name = enter your name
    email = youremail@yourdomain.com
[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\"

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

mergetool: winmerge
путь к mergetool: 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 все "зеленый" и удовлетворен вашими настройками.

На Git Extensions v2.47.3 это действительно легко настроить:

Настройки -> Глобальные настройки -> в раскрывающемся списке "Mergetool" введите вручную: WinMerge и смотреть чудо.

То же самое для раскрывающегося списка "Difftool".

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

Просто глупо, что опция "WinMerge" не указана в выпадающем списке. Ну что ж.

На Windows 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

Ответ @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 установите описания для левой и правой панели.

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

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

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

  1. Просто звонит WinMergeU.exe *conflictfile*в то время как двусторонние вызовы страдают от того, что левое окно представляет <<<<<<<, =======, а также >>>>>>> маркеры, которые содержит $MERGED.
  2. Примените mergetool для каждого репо - я редактирую файл $GIT_DIR/config. Тот же результат может быть достигнут путем вызова git config без аргумента --system или --global. Следует отметить, что есть несколько областей конфигурации на выбор.

Переменная $PROGRAMFILES поддерживается git bash и (в отличие от аналогичной переменной на собственном cmd Windows) перемещается в "Program Files (x86)".

Другие вопросы по тегам