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:
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.
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 !.
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
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
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):
Ensuite, il est possible de cliquer sur chaque fichier et d'afficher les modifications à l'intérieur de Meld.
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:
dans l'onglet 1, vous voyez (de gauche à droite) la modification à apporter dans l'onglet 2 pour résoudre le conflit de fusion.
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).
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:
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.