Git mergetool с Meld в Windows

94

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

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

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

Нельсон
источник
Понятия не имею, есть ли смысл в этом, но я использую KDiff3, а путь, установленный в моем gitconfig, следующий: path = C: / Program Files (x86) /KDiff3/kdiff3.exe, а не C: \\ и т. д.
Fumler
1
Не могли бы вы решить проблему?
Роджер
1
Я не смог. Один из ответов, вероятно, правильный, но я не решаюсь отмечать его как таковой, поскольку на самом деле я не могу заставить Мелда вести себя должным образом: - /
Нельсон
@Nelson Не волнуйся, я тоже :(
abergmeier
Прокомментируйте и проголосуйте за проблему, связанную с апстримом, чтобы будущему пользователю даже не нужно было беспокоиться об этом.
Франклин Ю

Ответы:

152

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

Вот и все!

Аругин
источник
1
Это решение сработало для меня. Я также выполнил команду ниже, чтобы не запрашивать меня каждый раз, когда он открывает инструмент git config --global mergetool.prompt false
Vineel
1
Это решение работало для меня с Meld 3.16.2, также добавлено git config --global mergetool.keepBackup false, чтобы удалить эти надоедливые резервные копии.
Джей
2
по какой-то причине после применения этого решения все выглядело красным (изменилось), и мне пришлось сделать это:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny
7
С этим решением я получаю Cannot import: GTK+и DLL load failed.
Юрген
4
@Juergen Ответ на этот вопрос заключается в том, что существует несоответствие пути. Если бы вы скопировали libgirepository-1.0-1.dll, который находится в вашем каталоге lib, на один каталог вверх (это тот же каталог, что и Meld.exe) и запустите, вы обнаружите, что все работает,
demongolem
26

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

[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\"
Мартин Душек
источник
1
Мне кажется, что правки сломали решение. Оригинальная версия мне подходит, так что +1. Я обнаружил, что он работает без линии пути.
vossad01
Это работает для меня , когда я cmdбез pathи использовать кавычку вместо одинарные кавычки, одинарные кавычки вместо слэш-двойные кавычки.
sq33G
С Win10 1903 и WSL я попробовал несколько этих подходов к настройке, и git не смог вызвать meld. В итоге я использовал символическую ссылку Program_Files_x86 -> 'Program Files (x86)/'и использовал[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag
10

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

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"
Schuess
источник
Именно это сработало для меня, хотя я все равно выбрал индивидуальный путь установки. Стоит отметить, что существует разница между «путем», который используется в большинстве руководств, и «cmd», который указан здесь.
FauxFaux
Я пробовал и ваше, и решение Мартина, и ни одно из них не сработало. Я думаю, что происходит еще кое-что. Окно открывается, а затем немедленно закрывается, а затем открывается Meld с путями, указывающими на каталог установки Meld, а не на репо. Может ли аргумент, переданный в Meld, привести к его смерти, а затем он обнаружит проблему и перезапустится с путем по умолчанию? Я понимаю, но я не уверен, как это исправить ...
Нельсон
Вы уверены, что используете meld.exe, а не файл meld, который (я думаю) находится в папке bin. Я помню, что у меня возникла проблема, когда я использовал просто файл meld, и он запускал приложение до того, как git имел возможность поместить файлы во временную папку.
Schuess
Я использовал ваше решение, но использовал meldфайл в binкаталоге (я фактически переименовал файл meld.py), и он работал без проблем.
Jarrett
7

Windows:

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

Связанный:

  1. Загрузите и установите meld отсюда: https://meldmerge.org/
  2. Как мне заставить Git использовать выбранный мной редактор для коммитов?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
Габриэль Скобы
источник
4

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

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

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

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

star99ers
источник
3
Средство отслеживания проблем не было настроено для автоматического присвоения мне проблемы, поэтому я пропустил комментарии. Для гуглеров, которые обнаружат это позже; эта проблема исправлена.
Киган
4

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

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here
Правин
источник
3

По какой-то причине в 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
Дэвид Л.
источник
2

Ни один из ответов не помог мне. Я закончил с этим в файле .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 выдает ошибку.

Джереми Бенкс
источник
0

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

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

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

Дрей
источник