web-dev-qa-db-fra.com

Git mergetool avec Meld sous Windows

Sous Linux, mon outil de fusion préféré est Meld, et je n’ai eu aucun problème à l’utiliser ou à le configurer pour fonctionner avec Git. Cependant, sous Windows, l'histoire a été différente.

Tout d'abord, j'ai installé Meld à partir d'un paquet que j'ai trouvé ici: https://code.google.com/p/meld-installer/

Ensuite, j’ai configuré mon fichier .gitconfig de manière à prendre en charge Meld comme outil de fusion par défaut.

[merge]                                                      
    tool = meld                                                                         

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

Donc, quand j'ai un conflit, je fais git difftool et Meld s'ouvre en fait. Cependant, les chemins d'accès aux fichiers que Git écrit pour les transmettre à l'outil diff sont incorrects. Par exemple, même si Git génère les fichiers BASE, LOCAL et REMOTE dans le répertoire du référentiel (l'emplacement d'où j'ai appelé git mergetool), Meld essaie d'ouvrir chacun de ces fichiers dans le répertoire de l'exécutable. 

Au lieu d'ouvrir C:\repo\roses.txt.LOCAL.2760.txt, Meld essaie d'ouvrir C:\Program Files (x86)\Meld\meld\roses.txt.LOCAL.2760.txt.

Quelqu'un at-il déjà rencontré ce problème ou sait-il comment configurer Git/Meld pour qu'il fonctionne correctement sous Windows?

79
Nelson

Pourquoi n'utilisez-vous pas git bash pour Windows?

Après l'installation, mélangez simplement:

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

C'est tout!

132
Arugin

Schuess, fais attention au caractère d'espace dans les répertoires!

[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'
25
Martin Dušek

J’ai eu exactement le même problème et j’ai trouvé que j’étais obligé de faire tout mon possible pour que ça fonctionne ... Voici ce que je mets dans mon fichier .gitconfig. (Notez que mon exécutable de fusion est dans un emplacement différent)

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

J'ai trouvé une solution dans un rapport de bogue sur l'installateur de fusion, sur cette page:

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

Autant que je sache, le problème est que le programme meld.exe (qui exécute meld via l'interpréteur python) définit sans nécessité le répertoire de travail de la commande sur celui de meld.exe. Cela entraîne une interprétation incorrecte des chemins relatifs lorsqu'ils sont transmis en tant qu'arguments de ligne de commande.

La solution consiste à remplacer le fichier meld.exe fourni par un fichier généré en compilant le fichier meld.ahk à l'aide de AHK2EXe (script AutoHotKey -> exe). Il suffit de télécharger le script le plus au bas de la page, car quelques versions ont été publiées ici.

4
star99ers

Je suis moi aussi confronté à un problème similaire. Le système d'exploitation utilisé est Windows 10 et les modifications suivantes ont fonctionné pour moi.

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

Vous pouvez utiliser ces deux commandes ( comme dit Arugin ) - en utilisant le chemin correct vers Meld.exe:

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

OU vous pouvez simplement modifier votre fichier C:\Users\YOUR_USER_NAME\.gitconfig directement et ajouter les éléments suivants à la fin:

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

Maintenant, appelez git difftool dans Git Bash pour Windows et Meld s’ouvrira en tant que visionneur difftool par défaut.

3
Gabriel Staples

Pour une raison quelconque, dans Windows 10, la variable d’environnement PATH n’a pas pu être définie correctement lors de l’installation; une exception étrange est alors générée, indiquant qu’il est impossible de trouver des fichiers .dll situés sous "C:\Program Files (x86)/Meld/bin "répertoire.

Une solution pour moi était, exécutez in git bash:

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

Ou ajouter aux fenêtres PATH

C:\Program Files (x86)/Meld/bin
2
David L.

Aucune des réponses n'a fonctionné pour moi. J'ai fini avec ceci dans le fichier .gitconfig:

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

Après un git merge mybranch se terminant par des conflits, il vous suffit de taper git mergetool et le mélange s'ouvre. Après une sauvegarde, vous devez vous engager dans git et les conflits sont résolus. 

Pour une raison quelconque, cela ne fonctionnait qu'avec Meld 3.18.x, Meld 3.20.x me donne une erreur.

1
Jeremy Benks

Après avoir essayé tout ce qui précède, configurer Meld pour qu'il s'exécute en tant qu'administrateur a fonctionné pour moi.

  1. Cliquez avec le bouton droit sur Meld.exe.
  2. Allez dans Propriétés > Compatibilité et cochez la case Run this program as an administrator

Les erreurs que j'ai reçues faisaient référence à des fichiers temporaires tels que c:\windows\temp\meld-*, qui n'étaient pas créés. Élever les autorisations de Meld semble faire l'affaire, car cela fonctionne maintenant avec git difftool et s'exécute manuellement dans Meld.

0
Drey