Git mergetool з Meld у Windows


93

У 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 пише для передачі інструменту diff, є неправильними. Наприклад, навіть незважаючи на те, що 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

Будь ласка, коментуйте та голосуйте за випускну тему, щоб майбутньому користувачеві навіть не потрібно було турбуватися про це.
Франклін Ю

Відповіді:


151

Чому ви не використовуєте git bash для Windows?

Після встановлення meld просто:

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

Це все!


Це рішення спрацювало для мене, я також зробив команду нижче, щоб не підказувати мені кожного разу, коли він відкриває інструмент git config --global mergetool.prompt false
Vineel Kovvuri

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
Білл Хоаг,

10

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

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

Якраз це добре працювало для мене, завдяки спеціальному шляху встановлення, який я вибрав у будь-якому випадку. Варто зазначити, що існує різниця між "path", яким користується більшість посібників, і "cmd", який вказано тут.
FauxFaux

Я спробував і твої, і рішення Мартіна, і жоден з них не працював. Думаю, відбувається щось інше. Вікно відкривається, а потім негайно закривається, а потім відкривається Meld із шляхами, що вказують на каталог встановлення Meld замість репо. Чи може аргумент, переданий Meld, спричиняти його смерть, а потім виявляє проблему та перезапускається із типовим шляхом? Я хапаюся тут, але не знаю, як це усунути ...
Нельсон

Ви впевнені, що використовуєте meld.exe, а не файл meld, який знаходиться в (я думаю) папці bin. Я пам’ятаю, у мене виникла проблема, коли я використав просто файл злиття, і він запускає програму, перш ніж git має можливість розмістити файли у тимчасовій папці.
schuess

Я використовував ваше рішення, але використовуючи meldфайл у binкаталозі (я насправді перейменовував файл meld.py), і він працював без проблем.
Джарретт

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 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!

Пов’язані:

  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). Просто скачайте сценарій найдальше на сторінці, оскільки там було опубліковано кілька версій.


3
Трекер випусків не був налаштований для автоматичного присвоєння випуску мені, тому я пропустив наявність коментарів. Для Google, які знайдуть це пізніше; ця проблема виправлена.
Кіган

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" 

Або додайте до вікна 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.