Git mergetool с Meld на Windows

В Linux мой любимый инструмент слияния - Meld, и у меня не было проблем с его использованием или настройкой для работы с Git. Однако в Windows это была другая история.

Сначала я установил Meld из пакета, который нашел здесь: https://code.google.com/p/meld-installer/

Затем я настроил свой.gitconfig так, чтобы он поддерживал Meld в качестве mergetool по умолчанию.

[merge]                                                      
    tool = meld                                                                         

[mergetool "meld"]                                           
    path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
    keepBackup = false                                   
    trustExitCode = false

Итак, когда у меня конфликт, я делаю git difftool, а Мелд действительно открывается. Однако пути к файлам, которые Git записывает для передачи в инструмент сравнения, неверны. Например, несмотря на то, что Git генерирует файлы BASE, LOCAL и REMOTE в каталоге хранилища (местоположение, из которого я назвал git mergetool), Meld пытается открыть каждый из этих файлов в каталоге исполняемого файла.

Вместо того чтобы открывать C:\repo\roses.txt.LOCAL.2760.txt, Мелд пытается открыть C:\Program Files (x86)\Meld\meld\roses.txt.LOCAL.2760.txt.

Кто-нибудь сталкивался с этим раньше или знает, как настроить Git / Meld для корректной работы в Windows?

7 ответов

Почему вы не используете git bash для Windows?

После установки просто:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe" <- path to meld here

Это все!

Шуесс, будь осторожен с космическим персонажем в каталогах!

[merge]
    tool = meld
[mergetool "meld"]
    prompt = false
    keepBackup = false
    keepTemporaries = false
    path = C:/Program Files (x86)/Meld/meld.exe
    cmd = '\"/c/Program Files (x86)/Meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'

Вы можете использовать эти две команды ( как говорит Аругин)- используя правильный путь к Meld.exe:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"

ИЛИ вы можете просто отредактировать свой C:\Users\YOUR_USER_NAME\.gitconfig файл и добавьте в конец следующее:

[merge]
  tool = meld
[mergetool "meld"]
  path = C:\\Program Files (x86)\\Meld\\Meld.exe

Сейчас звоните git difftool в Git Bash для Windows, и Meld откроется как ваша программа просмотра difftool по умолчанию.

У меня была точно такая же проблема, и я обнаружил, что вынужден был грубо заставить свой путь заставить его работать. Вот что я положил в свой файл.gitconfig. (Обратите внимание, что мой исполняемый файл находится в другом месте)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"

По какой-то причине в Windows 10 переменная окружения PATH не может быть правильно установлена ​​во время установки, поэтому возникает странное исключение, говорящее о том, что он не может найти некоторые.dll, которые находятся в "C:\Program Files (x86)/ Каталог "Meld / bin".

Обходным путем для меня было выполнить в git bash:

export PATH=$PATH:"/C/Program Files (x86)/Meld/lib" 

Или добавьте в Windows PATH

C:\Program Files (x86)/Meld/bin

Я тоже столкнулся с подобной проблемой. Используемая операционная система - Windows 10, и следующие изменения работали для меня. Это больше похоже на проблему пути

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here

Я нашел решение в отчете об ошибке в установщике meld на этой странице:

https://code.google.com/p/meld-installer/issues/detail?id=11

Насколько я понимаю, проблема в том, что программа meld.exe (которая запускает соединение через интерпретатор python) без необходимости устанавливает рабочий каталог команды в каталог meld.exe. Это приводит к неправильной интерпретации относительных путей при передаче в качестве аргументов командной строки.

Решение состоит в том, чтобы заменить предоставленный файл meld.exe файлом, сгенерированным путем компиляции файла meld.ahk с использованием AHK2EXe (скрипт AutoHotKey -> exe). Просто скачайте сценарий, который расположен ниже страницы, так как там было опубликовано несколько версий.

Ни один из ответов не сработал для меня. Я закончил с этим в.gitconfig-файле:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

После git merge mybranch заканчивая конфликтами, вы просто набираете git mergetool и смесь открывается. После сохранения вы должны выполнить коммит в git и конфликты будут разрешены.

По некоторым причинам, это работало только с Meld 3.18.x, Meld 3.20.x выдает мне ошибку.

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

  1. Щелкните правой кнопкой мыши Meld.exe
  2. Перейдите в Свойства > Совместимость и выберите Run this program as an administrator флажок

Ошибки, которые я получил, ссылались на временные файлы, такие как c:\windows\temp\meld-*, которые не были созданы. Повышение разрешений Мелда, кажется, делает свое дело, поскольку теперь оно работает с обоими git difftool и работает вручную в Meld.

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