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

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

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

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

Ответ 1

Обзор
Ниже приведены инструкции по настройке GIT Version Control, чтобы вы могли использовать лучший набор инструментов, чем установка по умолчанию. Для установки требуется, чтобы 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\"

Запустите "GitExtensions", перейдите в "tools- > Settings → 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
Команда diffftool: "c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

line endings: checkout as-is, commit as-is

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

Ответ 2

В Git Расширения v2.47.3 это очень просто установить:

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

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

enter image description here

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

enter image description here

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

Ответ 3

В 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

Ответ 4

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

Ответ 5

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

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

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

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

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