Почему я не могу использовать TortoiseMerge в качестве инструмента слияния git в Windows?

Я пытаюсь выполнить свой первый слияние Git когда-либо (захватывающе!), но не может получить Git Gui (0.13.GITGUI от Git 1.7.4.msysgit.0) распознавать TortoiseMerge (1.6.11.20210 x64) в Windows 7. На основе ответ на аналогичный вопрос, Я сделал следующие изменения в конфигурацию:

$ git config --global merge.tool tortoisemerge
$ git config --global mergetool.tortoisemerge.cmd 'TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"'
$ git config --global --list
...snip...
merge.tool=tortoisemerge
mergetool.tortoisemerge.cmd=TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"
$

к сожалению, когда я запускаю Git Gui и пытаюсь "запустить инструмент слияния", я получаю ошибку Unsupported merge tool 'tortoisemerge'.

может ли кто-нибудь сказать мне, что я сделал неправильно? Вот соответствующие разделы моего ~/.gitconfig:

[merge]
        tool = tortoisemerge
[mergetool "tortoisemerge"]
        cmd = TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"

обновление

TortoiseMerge отлично работает с вышеуказанной конфигурацией при запуске git mergetool из командной строки. Кажется, что только Git Gui имеет проблемы с ним. :-/

5 ответов


если у вас есть последняя git, запустите эту командную строку один раз:

git config merge.tool tortoisemerge

важно: не добавлять .exe расширение команды.

если это не удается, или если вы хотите добавить другой инструмент слияния, о котором git не знает, сделайте следующее:

откройте одно из следующих в Редакторе:

  • 64-битный git:C:\Program Files\Git\mingw64\share\git-gui\lib\mergetool.tcl
  • 32-битный git:C:\Program Files (x86)\Git\share\git-gui\lib\mergetool.tcl

добавить что-то вроде этого в mergetool.на TCL:

tortoisemerge {
    set cmdline [list TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"]
}

поместите новую запись tortoisemerge над этим другим кодом:

default {
        error_popup [mc "Unsupported merge tool '%s'" $tool]
        return
}

бонус пример:

чтобы использовать sourcegear diffmerge, добавьте это в mergetool.на TCL:

diffmerge {
    set cmdline [list "C:/Program Files (x86)/SourceGear/DiffMerge/DiffMerge.exe" --merge --result=$MERGED $LOCAL $BASE $REMOTE]
}

попробуйте это:

[merge]
tool = tortoise

[mergetool "tortoise"]
cmd = "TortoiseMerge.exe" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"

источник: http://programmersunlimited.wordpress.com/2010/07/01/getting-git-to-use-tortoisemerge/


для случая, над которым я работал, mergetool уже был настроен на tortoisemerge, но он не мог его найти.

предоставление полного местоположения работало в Windows:

git config --global mergetool.tortoisemerge.cmd "\"C:\Program Files\TortoiseGit\bin\TortoiseGitMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\""

попробуйте ввести TortoiseMerge.exe из командной строки, чтобы убедиться, что он в пути. Если не добавить его через Мой Компьютер > Свойства > дополнительно > Переменные среды > системные переменные:путь.

затем из командной строки настройте его с помощью следующих команд

git config --replace --global diff.tool tortoisemerge
git config --replace --global difftool.diffmerge.cmd "TortoiseMerge.exe -base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\""
git config --replace --global difftool.prompt false

использовать его из командной строки, типа git difftool из вашего рабочего каталога git.

он показывает файлы по одному, поэтому вам все равно лучше установить TortoiseGit, который делает вещи легче справиться, даже если только для части diff.


эта проблема появляется решена в последнем git (у меня есть git version 1.9.4.msysgit.1).

C:\git\build>git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
tortoisemerge emerge vimdiff

C:\git\build>git config merge.tool tortoisemerge

C:\git\build>git mergetool
No files need merging