Depuis Git1.6.3, vous pouvez utiliser le script git difftool : voir ma réponse ci-dessous .
Peut-être que cet article vous aidera. Voici les meilleures parties:
Il existe deux façons différentes de spécifier un outil de diff externe.
La première est la méthode que vous avez utilisée, en définissant la variable GIT_EXTERNAL_DIFF. Cependant, la variable est censée pointer vers le chemin complet de l'exécutable. De plus, l'exécutable spécifié par GIT_EXTERNAL_DIFF sera appelé avec un ensemble fixe de 7 arguments:
path old-file old-hex old-mode new-file new-hex new-mode
Comme la plupart des outils diff nécessiteront un ordre différent (et seulement certains) des arguments, vous devrez probablement spécifier un script wrapper à la place, qui à son tour appelle le véritable outil diff.
La deuxième méthode, que je préfère, consiste à configurer l'outil de diff externe via "git config" . Voici ce que j'ai fait:
1) Créez un script wrapper "git-diff-wrapper.sh" qui contient quelque chose comme
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
Comme vous pouvez le voir, seuls les deuxième ("ancien fichier") et cinquième ("nouveau fichier") arguments seront transmis à l'outil diff.
2) Type
$ git config --global diff.external <path_to_wrapper_script>
à l'invite de commande, en remplaçant par le chemin d'accès à "git-diff-wrapper.sh", donc votre ~ / .gitconfig contient
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Veillez à utiliser la syntaxe correcte pour spécifier les chemins d'accès au script wrapper et à l'outil diff, c'est-à-dire utiliser des barres obliques inversées au lieu de barres obliques inverses. Dans mon cas, j'ai
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
dans .gitconfig et
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
dans le script wrapper. Attention au "chat" qui traîne!
(Je suppose que le ' | cat
' n'est nécessaire que pour certains programmes qui peuvent ne pas retourner un état de retour correct ou cohérent. Vous voudrez peut-être essayer sans le chat de fin si votre outil diff a un état de retour explicite)
( Diomidis Spinellis ajoute dans les commentaires :
La cat
commande est requise, car diff(1)
, par défaut, se termine avec un code d'erreur si les fichiers diffèrent.
Git s'attend à ce que le programme diff externe ne se termine avec un code d'erreur qu'en cas d'erreur réelle, par exemple s'il manque de mémoire.
En canalisant la sortie de git
vers cat
le code d'erreur non nul est masqué.
Plus efficacement, le programme pourrait simplement s'exécuter exit
avec un argument de 0.)
C'est (l'article cité ci-dessus) est la théorie de l'outil externe défini via le fichier de configuration (et non via la variable d'environnement).
En pratique (toujours pour la définition du fichier de configuration de l'outil externe), vous pouvez vous référer à: