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 diffftool, а Meld действительно открыт. Однако пути к файлам, которые git пишет для перехода к инструменту diff, неверны. Например, хотя git генерирует файлы BASE, LOCAL и REMOTE в каталоге репозитория (местоположение, с которого я вызывал git mergetool from), Meld пытается открыть каждый из этих файлов в каталоге исполняемого файла.

Вместо открытия C:\repo\roses.txt.LOCAL.2760.txt, Meld пытается открыть C:\Program Files (x86)\Meld\meld\roses.txt.LOCAL.2760.txt.

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

Ответ 1

Почему вы не используете 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

Вот и все!

Ответ 2

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

[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'

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

Windows:

Вы можете использовать эти две команды (как говорит Аругин) --using правильный путь к 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 по умолчанию.


Linux:

ОБНОВЛЕНИЕ 20 сентября 2019 года:
- Я мог бы также поместить здесь версию Linux для моей собственной справки в одном месте, если ничего больше:

Для Linux это тоже очень просто:

sudo apt update
sudo apt install meld
gedit ~/.gitconfig  # edit your ~/.gitconfig file (gedit GUI editor will open)

Затем добавьте в конец файла .gitconfig:

[diff]
    tool = meld

Вот оно! git difftool теперь работает на Linux Ubuntu!

Ответ 6

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

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

Ответ 7

Ни один из ответов не сработал для меня. Я закончил с этим в .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 merge mybranch git mergetool и открывается meld. После сохранения вы должны выполнить коммит в git и конфликты будут разрешены.

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

Ответ 8

По какой-то причине в 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

Ответ 9

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

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

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