Git: Comment configurer KDiff3 comme outil de fusion et outil de comparaison

Récemment, j’utilisais GitExtension 2.46, mais la version de Git qui a le même nom est 1.9.4.msysgit.2. Soucieux d’utiliser uniquement les commandes Git, j’ai désinstallé GitExtension et installé la dernière version disponible de Git et KDiff3 .

Lorsque je fais une fusion et que je suis en conflit, je lance la commande suivante:

$ git mergetool 

Puis je reçois le message:

L’outil de fusion kdiff3 n’est pas disponible en tant que ‘kdiff3’.

Je suppose que ce doit être par le chemin KDiff3.

Environnement

  • OS: Windows 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98 (64 bit)

Des questions:

  • Que dois-je configurer dans le fichier .gitconfig pour que la commande $ git mergetool ouvre l’interface graphique de KDiff3 avec les versions LOCAL , REMOTE , BASE et MERGED du fichier en conflit?

  • Comment le configurer pour l’utiliser avec diff-tool?

Ces sites ont été très utiles, presque, fusionnent et difftool . J’ai utilisé la configuration globale, mais peut être utilisé par le référentiel sans problème. Il vous suffit d’exécuter les commandes suivantes:

 git config --global --add merge.tool kdiff3 git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe" git config --global --add mergetool.kdiff3.trustExitCode false git config --global --add diff.guitool kdiff3 git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe" git config --global --add difftool.kdiff3.trustExitCode false 

L’utilisation de l’option trustExitCode dépend de ce que vous voulez faire lorsque l’outil diff est renvoyé. De la documentation :

git-difftool appelle un outil diff individuellement sur chaque fichier. Les erreurs signalées par l’outil diff sont ignorées par défaut. Utilisez –trust-exit-code pour effectuer une sortie git-difftool lorsqu’un outil diff appelé retourne un code de sortie non nul.

Juste pour prolonger la réponse de @ Joseph :

Après avoir appliqué ces commandes, votre fichier global .gitconfig aura les lignes suivantes (pour accélérer le processus, vous pouvez simplement les copier dans le fichier) :

 [merge] tool = kdiff3 [mergetool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe trustExitCode = false [diff] guitool = kdiff3 [difftool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe trustExitCode = false 

Eh bien, le problème est que Git ne peut pas trouver KDiff3 dans% PATH%.

Dans une installation Unix typique, tous les exécutables résident dans plusieurs emplacements connus ( /bin/ , /usr/bin/ , /usr/local/bin/ , etc.) et on peut appeler un programme en tapant simplement son nom dans un fichier. processeur shell (par exemple, cmd.exe :)).

Dans Microsoft Windows, les programmes sont généralement installés sur des chemins dédiés, vous ne pouvez donc pas simplement taper kdiff3 dans une session de cmd et lancer KDiff3.

La solution difficile: vous devez dire à Git où trouver KDiff3 en spécifiant le chemin complet vers kdiff3.exe . Malheureusement, Git n’aime pas les espaces dans la spécification du chemin dans sa configuration, donc la dernière fois que j’en avais besoin, je me suis retrouvé avec ces anciens “C: \ Progra ~ 1 … \ kdiff3.exe” comme s’il était tard 1990 🙂

La solution simple: Modifiez les parameters de votre ordinateur et incluez le répertoire avec kdiff3.exe dans% PATH%. Ensuite, testez si vous pouvez l’appeler depuis cmd.exe par son nom, puis lancez Git.

J’avais besoin d’append les parameters de ligne de commande ou KDiff3 ne s’ouvrirait que sans fichiers et me demanderait la base, locale et distante. J’ai utilisé la version fournie avec TortoiseHg .

De plus, je devais recourir aux bons vieux noms de fichiers DOS 8.3.

 [merge] tool = kdiff3 [mergetool "kdiff3"] cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED 

Cependant, cela fonctionne correctement maintenant.