web-dev-qa-db-fra.com

Configurer et utiliser Meld en tant que votre git difftool et mergetool

Bien que la plupart des informations de cette question et de cette réponse soient disponibles sur StackOverflow, elles sont réparties sur de nombreuses pages et entre autres réponses inexactes ou trompeuses. Il m'a fallu un certain temps pour rassembler tout ce que je voulais savoir.

Il y a beaucoup de programmes différents qui peuvent être utilisés comme git difftool et mergetool, et il n'y a certainement pas de consensus sur ce qui est le meilleur (les opinions, les exigences et les systèmes d'exploitation diffèrent clairement).

Meld est un choix populaire multiplate-forme (UNIX/Linux, OSX, Windows), comme indiqué dans la question StackOverflow, Quel est le meilleur outil de fusion visuelle pour Git? , dans lequel la réponse proposant Meld a plus de trois fois le nombre de voix exprimé par tout autre outil.

Les deux questions suivantes seront répondues dans ma réponse ci-dessous:

  • Comment puis-je configurer et utiliser Meld comme difftool de Git?
  • Comment puis-je configurer et utiliser Meld comme mon outil de fusion git?

Remarque: il n'est pas nécessaire d'utiliser le même programme à la fois avec difftool et mergetool. Vous pouvez définir différents programmes pour les deux.

165
mattst

Alors que l’autre réponse est correcte, voici le moyen le plus rapide de procéder et de configurer Meld comme outil de différenciation visuelle. Il suffit de copier/coller ceci:

git config --global diff.tool meld
git config --global difftool.Prompt false

Maintenant, lancez git difftool dans un répertoire et Meld sera lancé pour chaque fichier différent.

Note latérale: La fusion est étonnamment lente lors de la comparaison de fichiers CSV, et aucun outil de différenciation Linux que j'ai trouvé n'est aussi rapide que cet outil Windows de 2009, appelé CompareIt !.

53
Dan Dascalescu

Pour les fenêtres . Exécutez ces commandes dans Git Bash:

git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.Prompt false

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

(Mettez à jour le chemin du fichier pour Meld.exe si le vôtre est différent.)

Pour Linux . Exécutez ces commandes dans Git Bash:

git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.Prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.Prompt false

Vous pouvez vérifier le chemin de Meld en utilisant cette commande:

which meld
40
MarredCheese

Je préfère configurer meld en tant que commande séparée, comme ceci:

git config --global alias.meld '!git difftool -t meld --dir-diff'

Cela le rend similaire au script git-meld.pl ici: https://github.com/wmanley/git-meld

Vous pouvez alors simplement courir

git meld
16
Ulf Adams

Il s’agit d’une réponse qui cible principalement les développeurs utilisant Windows, car la syntaxe Path de l’outil diff est différente de celle des autres plates-formes. 

J'utilise Kdiff3 comme outil de fusion git, mais pour configurer git difftool en tant que Meld, j'ai d'abord installé la dernière version de Meld à partir de Meldmerge.org , Puis ajouté les éléments suivants à mon .gitconfig global à l'aide :

git config --global -e

Notez que si vous préférez utiliser Sublime Text 3 au lieu de Vim par défaut, vous pouvez Ajouter ceci au fichier .gitconfig:

[core]
editor = 'c:/Program Files/Sublime Text 3/sublime_text.exe'

Ensuite, vous ajoutez inn Meld comme outil de difftool

[diff]
tool = meld
guitool = meld 

[difftool "meld"]
cmd = \"C:/Program Files (x86)/Meld/Meld.exe\" \"$LOCAL\" \"$REMOTE\" --label \"DIFF 
(ORIGINAL MY)\"
Prompt = false
path = C:\\Program Files (x86)\\Meld\\Meld.exe

Notez la barre oblique dans la cmd ci-dessus, sous Windows, il est nécessaire. 

Il est également possible de configurer un alias pour afficher le diff actuel avec une option --dir-diff Cela listera les fichiers modifiés dans Meld, ce qui est pratique lorsque vous avez modifié plusieurs fichiers (un scénario très courant en effet). 

L'alias ressemble à ceci dans le fichier .gitconfig, sous la section [alias]:

showchanges = difftool --dir-diff

Pour afficher les modifications que j'ai apportées au code, il suffit ensuite d'entrer la commande suivante:

git showchanges

L'image suivante montre comment cette option --dir-diff peut afficher une liste des fichiers modifiés (exemple):  Meld showing list of files with changes between the $LOCAL and $REMOTE

Ensuite, il est possible de cliquer sur chaque fichier et d'afficher les modifications à l'intérieur de Meld. 

1
Tore Aurstad

Il peut être compliqué de calculer un diff dans votre tête à partir des différentes sections de $ MERGED et de l’appliquer. Dans ma configuration, meld aide en vous montrant ces différences visuellement, en utilisant:

[merge]
    tool = mymeld
    conflictstyle = diff3

[mergetool "mymeld"]
    cmd = meld --diff $BASE $REMOTE --diff $REMOTE $LOCAL --diff $LOCAL $MERGED

Cela semble étrange mais offre un flux de travail très pratique, utilisant trois onglets:

  1. dans l'onglet 1, vous voyez (de gauche à droite) la modification à apporter dans l'onglet 2 pour résoudre le conflit de fusion.

  2. dans le côté droit de l'onglet 2, vous appliquez le "changement que vous devez apporter" et copiez le contenu du fichier entier dans le presse-papiers (à l'aide de ctrl-a et ctrl-c).

  3. dans l'onglet 3, remplacez le côté droit par le contenu du presse-papiers. Si tout est correct, vous verrez maintenant - de gauche à droite - le même changement que celui indiqué dans l'onglet 1 (mais avec des contextes différents). Enregistrez les modifications apportées dans cet onglet.

Remarques:

  • ne modifiez rien dans l'onglet 1
  • ne sauvegardez rien dans l'onglet 2 car cela produira des popups ennuyeux dans l'onglet 3
0
mnieber

Pour Windows 10, insérez ceci dans votre fichier .gitconfig:

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

Tout ce que vous avez besoin de savoir est écrit dans cette super réponse par Mattst plus haut.

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

0
Jeremy Benks