Git mergetool con Meld su Windows


93

In Linux, il mio strumento di unione preferito è Meld e non ho avuto problemi a utilizzarlo o configurarlo per funzionare con Git. Tuttavia, in Windows è stata una storia diversa.

Innanzitutto, ho installato Meld da un pacchetto che ho trovato qui: https://code.google.com/p/meld-installer/

Quindi, ho configurato il mio .gitconfig in questo modo per supportare Meld come mergetool predefinito

[merge]                                                      
    tool = meld                                                                         

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

Quindi, quando ho un conflitto, faccio git difftool e Meld si apre di fatto. Tuttavia, i percorsi dei file che Git scrive per passare allo strumento diff non sono corretti. Ad esempio, anche se Git genera i file BASE, LOCAL e REMOTE nella directory del repository (la posizione da cui ho chiamato git mergetool), Meld cerca di aprire ciascuno di quei file nella directory dell'eseguibile.

Invece di aprire C: \ repo \ roses.txt.LOCAL.2760.txt, Meld tenta di aprire C: \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt.

Qualcuno si è imbattuto in questo prima o sa come configurare Git / Meld per funzionare correttamente in Windows?


Non ho idea se questo ha un motivo per essere provato, ma uso KDiff3 e il percorso impostato nel mio gitconfig è: path = C: / Program Files (x86) /KDiff3/kdiff3.exe e non C: \\ ecc.
Fumler

1
Potresti risolvere il problema?
Roger,

1
Non sono stato in grado di farlo. Una delle risposte è probabilmente corretta, ma esito a contrassegnarne una come tale poiché non riesco effettivamente a far sì che Meld si comporti correttamente: - /
Nelson

@Nelson Non preoccuparti, nemmeno io posso :(
abergmeier

Si prega di commentare e votare il problema a monte in modo che il futuro utente non debba nemmeno preoccuparsi di questo.
Franklin Yu

Risposte:


151

Perché non usi git bash per Windows?

Dopo l'installazione si fondono semplicemente:

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

È tutto!


Questa soluzione ha funzionato per me Ho anche fatto il comando di seguito per non chiedermi ogni volta che apre lo strumento git config --global mergetool.prompt false
Vineel Kovvuri

1
Questa soluzione ha funzionato per me con Meld 3.16.2, ha anche aggiunto git config --global mergetool.keepBackup false per rimuovere quei fastidiosi backup.
Jay,

2
per qualche motivo, dopo aver applicato questa soluzione tutto sembrava rosso (cambiato), e ho dovuto farlo:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
Con questa soluzione, ottengo Cannot import: GTK+e DLL load failed.
Juergen

4
@ Juergen La risposta a questa domanda è che è in corso una mancata corrispondenza del percorso. Se dovessi copiare libgirepository-1.0-1.dll che si trova nella tua directory lib di una directory in su (che è la stessa directory di Meld.exe) e avviare, scopriresti che le cose funzionano,
demongolem

26

Schuess, fai attenzione allo spazio nelle directory!

[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
Le modifiche mi sembrano aver rotto la soluzione. La revisione originale funziona per me, quindi +1. Ho scoperto che sembra funzionare senza la linea del percorso.
vossad01

Questo ha funzionato per me quando ho usato cmdsenza pathe ho usato backtick invece di virgolette singole, virgolette singole invece di virgolette doppie.
sq33G

Con Win10 1903 e WSL, ho provato un sacco di questi approcci di configurazione e git non poteva invocare la combinazione. Ho finito per creare un collegamento simbolico Program_Files_x86 -> 'Program Files (x86)/'e ho usato[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag il

10

Ho avuto lo stesso identico problema e ho scoperto che dovevo usare la forza bruta per farlo funzionare. Ecco cosa ho inserito nel mio file .gitconfig. (Nota che il mio eseguibile di combinazione è in una posizione diversa)

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

Esattamente quello ha funzionato bene per me, con il percorso di installazione personalizzato che avevo scelto comunque. Vale la pena notare che c'è una differenza tra "percorso", utilizzato dalla maggior parte delle guide, e "cmd" specificato qui.
FauxFaux

Ho provato sia la tua soluzione che quella di Martin e nessuna delle due ha funzionato. Penso che stia succedendo qualcos'altro. Si apre una finestra e poi si chiude immediatamente, quindi si apre Meld con i percorsi che puntano alla directory di installazione di Meld invece che al repository. Un argomento passato a Meld potrebbe causarne la morte e poi rileva il problema e si riavvia con il percorso predefinito? Sto capendo qui ma non sono sicuro di come risolvere questo problema ...
Nelson

Sei sicuro di utilizzare meld.exe e non il file meld che si trova (credo) in una cartella bin. Ricordo di aver avuto un problema in cui ho usato semplicemente il file di fusione e avvia l'applicazione prima che git abbia la possibilità di mettere i file nella cartella temporanea.
schuess

Ho usato la tua soluzione, ma usando il meldfile nella bindirectory (in realtà ho rinominato il file meld.py) e ha funzionato senza problemi.
Jarrett

7

Finestre:

Puoi utilizzare questi due comandi ( come dice Arugin ), utilizzando il percorso corretto per Meld.exe:

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

O puoi semplicemente modificare il tuo C:\Users\YOUR_USER_NAME\.gitconfigfile direttamente e aggiungere quanto segue alla fine di esso:

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

Adesso chiama git difftool Git Bash per Windows e Meld si aprirà come visualizzatore difftool predefinito.


Linux:

AGGIORNAMENTO 20 settembre 2019:
- Potrei anche mettere la versione Linux anche qui per mio riferimento in un posto se non altro:

Anche per Linux è semplicissimo:

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

Quindi aggiungi in fondo al file .gitconfig:

[diff]
    tool = meld

Questo è tutto! git difftoolora funziona su Linux Ubuntu!

Relazionato:

  1. Scarica e installa meld da qui: https://meldmerge.org/
  2. Come posso fare in modo che Git utilizzi l'editor di mia scelta per i commit?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

Ho trovato una soluzione in una segnalazione di bug sul programma di installazione di meld, in questa pagina:

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

Per quanto ho capito, il problema è che il programma meld.exe (che esegue meld tramite l'interprete python) imposta inutilmente la directory di lavoro del comando su quella di meld.exe. Ciò causa l'interpretazione errata dei percorsi relativi quando vengono passati come argomenti della riga di comando.

La soluzione è sostituire il meld.exe fornito con uno generato compilando il file meld.ahk, utilizzando AHK2EXe (script AutoHotKey -> exe). Basta scaricare lo script più in basso nella pagina, poiché ne sono state pubblicate alcune versioni.


3
Il rilevatore di problemi non è stato impostato per assegnarmi il problema automaticamente, quindi ho perso i commenti. Per i googler che lo trovano più tardi; questo problema è stato risolto.
Keegan

4

Anch'io ho affrontato un problema simile.Il sistema operativo utilizzato è Windows 10 e le seguenti modifiche hanno funzionato per me.Sembra più un problema di percorso

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

3

Per qualche motivo, in Windows 10 la variabile ambientale PATH non può essere impostata correttamente durante l'installazione, quindi viene sollevata una strana eccezione dicendo che non è in grado di trovare alcuni file .dll che si trovano sotto "C: \ Programmi (x86) / Directory Meld / bin ".

Una soluzione alternativa per me era, eseguire in git bash:

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

Oppure aggiungi a Windows PATH

C:\Program Files (x86)/Meld/bin

2

Nessuna delle risposte ha funzionato per me. Ho finito con questo nel file .gitconfig:

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

Dopo un git merge mybranchfinale con conflitti, digiti semplicemente git mergetoole la fusione si apre. Dopo un salvataggio, devi eseguire il commit in git ei conflitti vengono risolti.

Per qualche motivo, questo ha funzionato solo con Meld 3.18.x, Meld 3.20.x mi dà un errore.


0

Dopo aver provato tutto quanto sopra, l'impostazione di Meld per l'esecuzione come amministratore ha funzionato per me.

  1. Fare clic con il pulsante destro del mouse su Meld.exe
  2. Vai a Proprietà > Compatibilità e seleziona la Run this program as an administratorcasella di controllo

Gli errori che ho ricevuto c:\windows\temp\meld-*facevano riferimento a file temporanei come , che non venivano creati. L'elevazione delle autorizzazioni di Meld sembra fare il trucco poiché ora funziona con entrambi git difftoole funziona manualmente all'interno di Meld.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.