Pourquoi des diffs personnalisés
Le diff par défaut de Git est ligne par ligne en texte. Pour les formats binaires (PDF, DOCX, images) et le texte structuré où les diffs par ligne ne sont pas utiles (JS minifié, dumps SQL générés), les drivers de diff personnalisés produisent quelque chose que les humains peuvent lire.
Drivers de langage intégrés
# .gitattributes
*.py diff=python
*.rs diff=rust
*.go diff=golang
Définir un driver personnalisé
[diff "exif"]
textconv = exiftool
cachetextconv = true
*.jpg diff=exif
*.png diff=exif
Diff au niveau du mot pour la prose
[diff "tex"]
wordRegex = "[^[:space:]\\\\]+"
Override de détection binaire
*.svg diff
*.pdf -diff
*.bin binary
Exemple réel : dumps SQL
[diff "sqldump"]
textconv = "sed 's/^INSERT INTO/\\nINSERT INTO/g'"
Erreurs courantes
Les drivers configurés dans ~/.gitconfig sont locaux — les collègues ne voient aucun diff.
Diff externe entièrement
GIT_EXTERNAL_DIFF=meld git diff
git config diff.tool meld
git difftool