Как я могу сделать WinMerge my git mergetool?

Я пытаюсь интегрировать WinMerge с Git, как я видел ранее, в Windows 7 Ultimate.

Я выполнил следующие шаги, но ошибка продолжает появляться, когда я выполняю git mergetool, по умолчанию vimdiff.

Создал файл с именем winmerge.sh в корневом каталоге git: C/Program Files (x86)/Git/with: WinMergeU - это правильное местоположение.

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" 
git /e /u /dl "Base" /dr "Mine" "$1" "$2"

и использовал следующие команды.

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Ошибка отображается как:

git config option merge.tool set to unknown tool: winmerge

Ответ 1

Вы говорите об инструменте слияния, но вы (и некоторые другие люди с ответами) настраиваете его как инструмент diff.

Чтобы настроить инструмент слияния, вам нужно использовать конфигурации merge.tool и mergetool вместо diff.tool и difftool, например:

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

И затем вы можете использовать

git mergetool

который откроет вам два файла для редактирования.

Kudos для @dvdvck, упоминающего в комментариях, что в параметры командной строки вы можете указать третий файл для файла результата для winmerge (параметр outputpath).

Для полноты я упомянул, что есть и этот метод, предназначенный для полной конфигурации winmerge как для инструмента сравнения, так и для слияния.

Ответ 2

Git 2.5+ (Q2 2015) будет включать Winmerge в качестве известного git mergetool!

Если Winmerge находится в вашем %PATH%, вам нужно сделать git config merge.tool winmerge!

(Он также работает для инструмента diff: git config diff.tool winmerge)

См. commit 3e4f237 Дэвид Агилар (davvid), 20 мая 2015 г.
(слияние Юнио С Хамано - gitster - в совершить 324a9f4, 01 июня 2015)
Помощник: Филип Оукли (PhilipOakley), Йоханнес Шинделин (dscho), Себастьян Шуберт (sschuberth), SZEDER Gábor (szeder)

Вся конфигурация теперь выполняется для вас непосредственно в Git, mergetools/winmerge:

  • команда diff: "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
  • команда слияния: "$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

mergetools: добавить winmerge как встроенный инструмент

Добавьте сценарий winmerge с командами, описанными в этой теме, поэтому что пользователи могут использовать winmerge, не требуя каких-либо Дополнительная конфигурация.

Ответ 3

Если вы решили использовать SourceTree (или для любых поисковых систем Google с помощью SourceTree), вы можете использовать WinMerge для инструмента Merge Tool, установив инструмент Merge Tool в custom, указав Diff Command на WinMergeU.exe, как правило:

C:\Program Files (x86)\WinMerge\WinMergeU.exe

В "Аргументах" используйте:

-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED

Это приведет к редактированию левой части (обозначенной как "Mine" ), и это будет выходной файл при сохранении в WinMerge. Правая сторона (с надписью "Их" ) будет считана только для чтения (это аргумент -wr), это необходимо, потому что WinMerge выводит все сохраненные файлы в файл $MERGED, поэтому, если обе стороны были отредактированы, это выводит левую сторону, затем переписать это с правой стороны; лучше избегать такого путаницы.

Если вы оставите параметр резервного файла включенным, WinMerge создаст файл .bak. Содержимое этого файла будет либо исходным файлом левой стороны, либо вторым последним выходным файлом, если вы сохранили несколько раз. Вы можете отключить это или добавить *.bak в свой файл .gitignore.

Git сам создаст файл конфликта *.orig ПОСЛЕ того, как конфликт будет разрешен, на всякий случай, если вы его испортили. Опять же, вы можете добавить *.orig в свой файл .gitignore или отключить эту функцию. К сожалению, у SourceTree нет опции GUI для этого, поэтому запустите свой git bash или, если вы выбрали правильный параметр PATH во время установки, приглашение командной строки Windows и сделайте следующее:

git config --global mergetool.keepBackup false

Это остановит git создание файлов *.orig. Вы также можете напрямую отредактировать файл конфигурации, установив файл .gitconfig в корневой каталог вашего пользователя. Если вы знаете, как использовать VIM, вы можете редактировать все это с помощью этой команды:

git config --global --edit

Ответ 4

Здесь моя (в %userprofile%\.gitconfig или ~/.gitconfig on * nix), без оболочки (Win 7 Home Pro):

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\"

Ответ 5

Это легче сделать, и это сработало для меня:

git config --global diff.tool winmerge

git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"

git config --global difftool.prompt false

Ответ 6

Ваш путь неправильный, он должен быть "/c/Program Files (x86)/WinMerge/WinMergeU.exe".

Вы работаете в среде оболочки script, а не в командной строке Windows.

Ответ 7

Чтобы сделать WinMerge инструментом сравнения и объединения для Git-плагина Visual Studio 2017:

Из командной строки Windows: введите >> git config --global --edit, которая откроет файл .getconfig для редактирования.

Пожалуйста, обновите следующую команду:

[mergetool]
   prompt = false
   keepBackup = false
   keepTemporaries = false
[merge]
   tool = winmerge
   [mergetool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
   tool = winmerge
   [difftool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE

Ответ 9

Ввод настроек через командную строку был покрыт другими ответами. Файл .gitconfig для полного трехстороннего слияния с WinMerge можно настроить следующим образом (этот пример взят из Windows):

[merge]
    tool = WinMerge

[mergetool "WinMerge"]
    cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Local\" -dm \"Base\" -dr \"Remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
    trustExitCode = true
    keepBackup = false

[diff]
    tool = WinMerge

[difftool "WinMerge"]
    cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Old $BASE\" -dr \"New $BASE\" \"$LOCAL\" \"$REMOTE\"
    trustExitCode = true

Флаг информации:

  • /e - позволяет закрыть WinMerge одним нажатием клавиши "esc".
  • /u - Запрещает WinMerge регистрировать файлы в недавно использованном списке.
  • /dl,/dm и /dl - описания для левой, средней и правой панелей.
  • /o - выходной файл. Сохранение ЛЮБОЙ панели выведет содержимое этой панели в выходной файл.

trustExitCode = true говорит git принять вывод без дальнейшего запроса.

keepBackup = false автоматически удалит автоматически сгенерированные файлы *.orig.

Примечание: переменные $ BASE и $ MERGE при использовании difftool просто содержат имя файла.

Ответ 10

Пример:

git config --global --add diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
git config --global difftool.prompt false

Ответ 11

Изначально я проголосовал за ответ @CapinWinky за использование WinMerge из SourceTree. Этот ответ остается в силе, но теперь WinMerge также поддерживает трехстороннее слияние, которое требует дополнительных параметров.

В диалоге параметров SourceTree я выбрал "Пользовательский" в качестве инструмента слияния и ввел команду как:

C:\Program Files\WinMerge\WinMergeU.exe

и аргументы как:

-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED

Кажется, что нет необходимости заключать в кавычки параметры remote/local/base, чтобы обрабатывать пути с пробелами в них.

Эта конфигурация предназначена для использования средней панели в качестве объединенного выходного файла.

Ссылка на командную строку

У меня была проблема, что при попытке слияния WinMerge не открывался. Sourcetree запускает Git, чтобы открыть ваш инструмент выбора. При использовании пользовательской опции Sourcetree ваш файл конфигурации git (например, C:\Users\Me\.gitconfig) изменяется, чтобы добавить новый инструмент слияния, называемый "sourcetree", а команда Git включает в себя --tool=sourcetree. В какой-то момент файл .gitconfig не был обновлен правильно, и у меня в этом разделе было две строки 'cmd', одна из которых была повреждена:

[mergetool "sourcetree"]
    cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' -u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
    trustExitCode = true
    cmd = 'C:/Program '

Исправление файла .gitconfig вручную решило проблему.