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 для запуска от имени администратора работала на меня.
- Щелкните правой кнопкой мыши Meld.exe
- Перейдите в Свойства > Совместимость и выберите
Run this program as an administrator
флажок
Ошибки, которые я получил, ссылались на временные файлы, такие как c:\windows\temp\meld-*
, которые не были созданы. Повышение разрешений Мелда, кажется, делает свое дело, поскольку теперь оно работает с обоими git difftool
и работает вручную в Meld.