Outils de diff et de fusion externes
La visionneuse de diff et le résolveur à trois panneaux de Gitcito suffisent la plupart des jours. Certains jours, non : un fichier généré de 4 000 lignes, une fusion où il faut voir quatre colonnes en même temps, ou tout simplement l'outil que vous utilisez depuis dix ans et que vous lisez plus vite que n'importe quel autre.
Réglages → Général → Outils de diff et de fusion externes.
C'est la liste de git, pas la nôtre
Gitcito ne tient aucune table à lui. Les listes déroulantes sont
git difftool --tool-help et git mergetool --tool-help, ce qui explique que :
Les outils que git a déjà trouvés sur votre machine sont listés en premier ; ceux qu'il connaît mais ne trouve pas sont listés ensuite, marqués non installé.
Un outil personnalisé fonctionne sans support supplémentaire. Si vous avez
git config --global difftool.mine.cmd 'mycompare "$LOCAL" "$REMOTE"'alors
mineapparaît dans la liste déroulante comme n'importe quel outil intégré.Vos choix sont écrits dans
diff.tooletmerge.toolde votre configuration git globale — les mêmes clés que lit votre terminal. Réglez-les ici etgit difftoolen ligne de commande se comporte de la même façon. Réglez-les là-bas et Gitcito les reprend.
Git connaît une trentaine d'outils d'origine, dont Kaleidoscope, Beyond Compare, Meld, KDiff3, P4Merge, Araxis, DiffMerge, WinMerge, FileMerge, VS Code et la famille vim.
Où apparaissent les actions
| Surface | Action |
|---|---|
| Un fichier modifié dans le compositeur de commit | Diff dans <outil> — copie de travail contre l'index |
| Le résolveur de conflits | Fusionner dans <outil> — la fusion à trois points complète |
Les deux entrées n'apparaissent que si un outil est réellement configuré ; un
git difftool non configuré ne ferait qu'échouer, et un bouton inerte est pire
que pas de bouton du tout.
Ce qui se passe pendant que l'outil est ouvert
Gitcito attend sa fermeture. C'est délibéré — git mergetool n'indexe le fichier
résolu qu'après la sortie de l'outil, si bien qu'il y a alors un vrai résultat à
rapporter — et c'est pourquoi le bouton affiche un indicateur d'activité plutôt
que de rendre la main immédiatement.
Le reste de l'application reste réactif : ces commandes s'exécutent en dehors du verrou par dépôt qui sérialise les opérations git normales, si bien qu'un outil de fusion laissé ouvert pendant le déjeuner ne gèle pas l'onglet derrière lui.
Quand une fusion externe réussit, git indexe le fichier lui-même et Gitcito ferme le résolveur puis rafraîchit. Si vous fermez l'outil sans enregistrer, git le dit et rien ne change.
Le fichier .orig
git mergetool laisse par défaut une sauvegarde <file>.orig à côté du fichier
résolu — c'est le comportement de git, pas celui de Gitcito. La bascule dans les
réglages écrit mergetool.keepBackup ; désactivez-la et un fichier résolu ne
laisse plus rien derrière lui.
Limites
- Uniquement les diffs de la copie de travail. L'entrée du compositeur compare ce que vous avez maintenant à l'index. Comparer deux commits historiques dans un outil externe n'est pas câblé — utilisez la visionneuse de diff intégrée ou la comparaison pour cela.
- Un fichier à la fois. Il n'existe pas de balayage « diffe chaque fichier modifié ».
- Gitcito n'installe jamais rien. Un outil marqué non installé reste sélectionnable, parce que git pourra le trouver après que vous l'aurez installé — mais il échouera tant que ce n'est pas fait.