Git Mergetool z Meld w systemie Windows

94

W Linuksie moim ulubionym narzędziem do scalania jest Meld i nie miałem problemów z używaniem lub konfigurowaniem go do pracy z Git. Jednak w systemie Windows było inaczej.

Najpierw zainstalowałem Meld z pakietu, który znalazłem tutaj: https://code.google.com/p/meld-installer/

Następnie skonfigurowałem mój plik .gitconfig tak, aby obsługiwał Meld jako domyślne narzędzie scalające

[merge]                                                      
    tool = meld                                                                         

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

Tak więc, kiedy mam konflikt, robię git difftool, a Meld faktycznie się otwiera. Jednak ścieżki do plików zapisywanych przez Git w celu przekazania do narzędzia porównywania są nieprawidłowe. Na przykład, mimo że Git generuje pliki BASE, LOCAL i REMOTE w katalogu repozytorium (lokalizacja, z której nazwałem git Mergetool), Meld próbuje otworzyć każdy z tych plików w katalogu pliku wykonywalnego.

Zamiast otwierać C: \ repo \ roses.txt.LOCAL.2760.txt, Meld próbuje otworzyć C: \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt.

Czy ktoś napotkał to wcześniej lub wie, jak skonfigurować Git / Meld, aby działał poprawnie w systemie Windows?

Nelson
źródło
Nie mam pojęcia, czy ma to jakiś sens, ale używam KDiff3, a ścieżka ustawiona w moim gitconfig to: path = C: / Program Files (x86) /KDiff3/kdiff3.exe, a nie C: \\ itd.
Fumler
1
Czy mógłbyś rozwiązać problem?
Roger,
1
Nie mogłem. Jedna z odpowiedzi jest prawdopodobnie poprawna, ale waham się, czy oznaczyć ją jako taką, ponieważ w rzeczywistości nie mogę sprawić, aby Meld zachowywał się prawidłowo: - /
Nelson,
@Nelson Nie martw się, ja też nie :(
abergmeier
Prosimy o komentarz i zagłosowanie w sprawie upstream, aby przyszły użytkownik nie musiał się nawet o to martwić.
Franklin Yu

Odpowiedzi:

152

Dlaczego nie używasz git bash dla Windows?

Po zainstalowaniu połączenia po prostu:

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

To wszystko!

Arugin
źródło
1
To rozwiązanie zadziałało dla mnie. Wykonałem również poniższe polecenie, aby nie monitować mnie za każdym razem, gdy otwiera narzędzie git config --global irretool.prompt false
Vineel
1
To rozwiązanie działało dla mnie z Meld 3.16.2, dodano również git config --global mergetool.keepBackup false, aby usunąć te brzydkie kopie zapasowe.
Jay
2
z jakiegoś powodu po zastosowaniu tego rozwiązania wszystko wyglądało na czerwone (zmienione) i musiałem to zrobić:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny
7
Dzięki temu rozwiązaniu otrzymuję Cannot import: GTK+i DLL load failed.
Juergen
4
@Juergen Odpowiedź na to pytanie jest taka, że ​​występuje niezgodność ścieżki. Gdybyś skopiował libgirepository-1.0-1.dll, który jest w twoim katalogu lib o jeden katalog wyżej (to jest ten sam katalog co Meld.exe) i uruchomił, wszystko działałoby,
demongolem
26

Schuess, uważaj na znaki spacji w katalogach!

[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\"
Martin Dušek
źródło
1
Wydaje mi się, że zmiany zepsuły rozwiązanie. Oryginalna wersja działa dla mnie, więc +1. Zauważyłem, że wydaje się działać bez linii ścieżki.
vossad01
To zadziałało dla mnie, gdy użyłem cmdbez pathi użyłem apostrofów zamiast pojedynczych cudzysłowów, pojedynczych cudzysłowów zamiast ukośników.
sq33G
W Win10 1903 i WSL wypróbowałem kilka podejść konfiguracyjnych i git nie mógł wywołać połączenia. Skończyło się na linkowaniu symbolicznym Program_Files_x86 -> 'Program Files (x86)/'i używaniu[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag,
10

Miałem dokładnie ten sam problem i stwierdziłem, że muszę brutalnie forsować, aby to zadziałało. Oto, co umieściłem w moim pliku .gitconfig. (Zauważ, że mój plik wykonywalny połączenia znajduje się w innej lokalizacji)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"
schuess
źródło
Dokładnie to działało dobrze dla mnie, z niestandardową ścieżką instalacji, którą i tak wybrałem. Warto zauważyć, że istnieje różnica między „ścieżką”, której używa większość przewodników, a „cmd”, które jest tutaj określone.
FauxFaux
Wypróbowałem rozwiązania zarówno twoje, jak i Martina i żadne z nich nie zadziałało. Myślę, że dzieje się coś innego. Okno otwiera się, a następnie natychmiast zamyka, a następnie otwiera się Meld ze ścieżkami wskazującymi na katalog instalacyjny Meld zamiast repozytorium. Czy argument przekazany do Meld może powodować jego śmierć, a następnie wykrywa problem i uruchamia się ponownie z domyślną ścieżką? Łapię się tutaj, ale nie jestem pewien, jak rozwiązać ten problem ...
Nelson,
Jesteś pewien, że używasz pliku meld.exe, a nie pliku meld, który znajduje się (jak sądzę) w folderze bin. Pamiętam, że miałem problem polegający na tym, że użyłem po prostu pliku meld i uruchomił on aplikację, zanim git zdążył umieścić pliki w folderze tymczasowym.
schuess
Użyłem twojego rozwiązania, ale używając meldpliku w binkatalogu (właściwie zmieniłem nazwę pliku meld.py) i zadziałało bez problemu.
Jarrett
7

Okna:

Możesz użyć tych dwóch poleceń ( jak mówi Arugin ) - używając odpowiedniej ścieżki do Meld.exe:

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

LUB możesz po prostu edytować C:\Users\YOUR_USER_NAME\.gitconfigplik bezpośrednio i dodać na jego końcu:

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

Teraz zadzwoń git difftoolw Git Bash dla Windows, a Meld otworzy się jako domyślna przeglądarka difftool.


Linux:

AKTUALIZACJA 20 września 2019 r .:
- Równie dobrze mógłbym umieścić tutaj wersję Linuksa również dla własnego odniesienia w jednym miejscu, jeśli nic innego:

W przypadku Linuksa jest to również bardzo łatwe:

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

Następnie dodaj na dole pliku .gitconfig:

[diff]
    tool = meld

Otóż ​​to! git difftoolteraz działa na Linuksie Ubuntu!

Związane z:

  1. Pobierz i zainstaluj meld stąd: https://meldmerge.org/
  2. Jak sprawić, by Git używał wybranego przeze mnie edytora do zatwierdzeń?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
Gabriel Staples
źródło
4

Znalazłem rozwiązanie w raporcie o błędzie w instalatorze meld, na tej stronie:

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

O ile rozumiem, problem polega na tym, że program meld.exe (który działa meld przez interpreter języka Python) niepotrzebnie ustawia katalog roboczy polecenia na katalog meld.exe. Powoduje to niepoprawną interpretację ścieżek względnych, gdy są przekazywane jako argumenty wiersza poleceń.

Rozwiązaniem jest zastąpienie dostarczonego meld.exe plikiem wygenerowanym przez kompilację pliku meld.ahk przy użyciu AHK2EXe (skrypt AutoHotKey -> exe). Wystarczy pobrać skrypt znajdujący się najdalej na stronie, ponieważ zostało tam opublikowanych kilka wersji.

star99ers
źródło
3
Narzędzie do śledzenia problemów nie zostało skonfigurowane do automatycznego przypisywania mi problemu, więc przegapiłem, że są komentarze. Dla pracowników Google, którzy znajdą to później; Ten problem został rozwiązany.
Keegan
4

Ja też stanąłem przed podobnym problemem, używanym systemem operacyjnym jest Windows 10 i poniższe zmiany zadziałały. Wygląda bardziej na problem ze ścieżką

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here
Pravin
źródło
3

Z jakiegoś powodu w systemie Windows 10 zmienna środowiskowa PATH nie mogła zostać poprawnie ustawiona podczas instalacji, więc pojawia się dziwny wyjątek, mówiąc, że nie jest w stanie znaleźć niektórych plików .dll znajdujących się w folderze „C: \ Program Files (x86) / Katalog Meld / bin ”.

Obejściem dla mnie było wykonanie w git bash:

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

Lub dodaj do systemu Windows PATH

C:\Program Files (x86)/Meld/bin
David L.
źródło
2

Żadna z odpowiedzi nie pomogła. Skończyło się na tym w pliku .gitconfig:

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

Po git merge mybranchzakończeniu z konfliktami po prostu wpisujesz git mergetooli łączysz otwarte. Po zapisaniu musisz zatwierdzić w git, a konflikty zostaną rozwiązane.

Z jakiegoś powodu działało to tylko z Meldem 3.18.x, Meld 3.20.x daje mi błąd.

Jeremy Benks
źródło
0

Po wypróbowaniu wszystkich powyższych, ustawienie Meld do pracy jako administrator zadziałało dla mnie.

  1. Kliknij prawym przyciskiem myszy Meld.exe
  2. Przejdź do Właściwości > Zgodność i zaznacz pole Run this program as an administratorwyboru

Błędy, które otrzymałem c:\windows\temp\meld-*, dotyczyły plików tymczasowych, takich jak te , które nie były tworzone. Podniesienie uprawnień Meld wydaje się załatwiać sprawę, ponieważ działa teraz z obydwoma git difftooli działa ręcznie w Meld.

Dziupla
źródło