Qu'est-ce que difftastic ?
difftastic — la commande s'appelle difft — est un outil de diff structurel. Au lieu de comparer des lignes, il analyse les deux fichiers avec tree-sitter, construit un arbre syntaxique de chaque côté et signale les éléments de syntaxe qui ont réellement changé. Réindenter un bloc, réagencer une liste d'arguments ou déplacer une accolade n'est plus un diff, tandis qu'une variable renommée au milieu de code reformaté ressort immédiatement.
⚡ Fonctionnalités clés de difftastic
🌳 Diffs conscients de la syntaxe
Les deux côtés sont analysés en arbres syntaxiques et comparés comme des structures : le bruit de mise en forme disparaît, les vrais changements ressortent.
🧩 Plus de 30 langages
Rust, Python, TypeScript, Go, C, C++, Java, Ruby, YAML, JSON, HTML, CSS, Markdown et bien d'autres — difft --list-languages affiche la liste complète avec les extensions.
🪟 Côte à côte ou en ligne
--display choisit side-by-side, side-by-side-show-both, inline ou du JSON exploitable par un programme.
🔗 Remplacement direct pour Git
S'utilise comme commande de diff externe pour git, mais aussi pour Mercurial, Jujutsu et Fossil.
🚦 Repli honnête
Extension inconnue, fichier énorme ou trop d'erreurs d'analyse : repli sur un diff ligne à ligne avec surlignage par mots plutôt qu'un échec.
🗂️ Répertoires et conflits
Comparez deux répertoires en une commande, ou donnez-lui un fichier plein de marqueurs de conflit de fusion et lisez le conflit comme un diff.
apt upgrade vous maintient à jour.
📦 Installation depuis deb.griffo.io
Étape 1 : ajouter le dépôt
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Il existe un miroir gratuit pour toujours. deb-free.griffo.io distribue des paquets gratuitement pour toujours — sans compte, sans abonnement, au plus 2 mois derrière l'upstream, correctifs de sécurité immédiats. Il contient aujourd'hui cliamp, Ghostty, lazydocker, Oh My Posh et Zed ; difftastic n'en fait pas partie, le dépôt ci-dessus reste donc le seul moyen de l'installer — demandez-le et il pourra y être ajouté.
🧩 À propos de l'option extrepo. extrepo est l'outil de Debian pour les dépôts externes : il écrit le fichier de sources et installe la clé de signature à votre place, après l'avoir vérifiée face à des métadonnées signées. Ce dépôt y est enregistré sous le nom griffo, et le miroir gratuit à vie sous griffo-free ; sur Debian (bookworm, trixie, forky et sid), les commandes ci-dessus constituent donc toute l'installation.
extrepo ne met en place que le fichier de sources et la clé : les identifiants d'un abonnement vont toujours dans /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu n'est pas couvert, car extrepo ne publie de métadonnées que pour les suites Debian : utilisez-y les commandes avec sudo ou en root.
Étape 2 : installer difftastic
# Installer le dernier difftastic
sudo apt install difftastic
# Vérifier l'installation
difft --version# Installer le dernier difftastic
apt install difftastic
# Vérifier l'installation
difft --versionÉtape 3 : le brancher sur git
# Comparer deux fichiers directement
difft old.py new.py
# Ou laisser git appeler difftastic pour chaque diff
git config --global diff.external difft
# Le git diff classique reste à une option près
git --no-ext-diff diff
# La page de manuel est fournie dans le paquet
man difft🎯 Exemples d'utilisation de base
Comparer fichiers et répertoires :
# Deux fichiers, côte à côte
difft before.rs after.rs
# Une seule colonne, plus proche du diff traditionnel
difft --display inline before.ts after.ts
# Deux répertoires, en ignorant les fichiers inchangés
difft old/ new/ --skip-unchanged --sort-paths
# Quels langages cette version comprend-elle ?
difft --list-languagesL'utiliser comme diff de git :
# Ponctuel : difftastic seulement pour ce diff
GIT_EXTERNAL_DIFF=difft git diff
# Des diffs structurels sur tout l'historique
GIT_EXTERNAL_DIFF=difft git log -p --ext-diff
# L'enregistrer comme difftool
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git difftool --tool difftastic
# Un alias git pour un log structurel
git config --global alias.dlog '!GIT_EXTERNAL_DIFF=difft git log -p --ext-diff'Régler l'affichage :
# Ignorer les changements qui ne touchent que les commentaires
difft --ignore-comments a.go b.go
# Plus de contexte, et des tabulations de deux espaces
difft --context 5 --tab-width 2 a.py b.py
# Pour les scripts : y a-t-il eu un changement syntaxique ?
difft --check-only --exit-code a.json b.json
# Des valeurs par défaut pour chaque appel, via l'environnement
export DFT_DISPLAY=inline DFT_BACKGROUND=light🔧 Intégrations avec d'autres outils
difftastic se branche sur les outils qui vous montrent déjà des diffs :
- git :
GIT_EXTERNAL_DIFF,diff.externalou une entréedifftool— avec--ext-diff, cela s'étend àgit log -petgit show - Jujutsu : définissez-le comme commande de diff dans
jjpour des diffs structurels dans un flux compatible Git - Mercurial et Fossil : les deux acceptent une commande de diff externe : le même binaire sert tous vos dépôts
- Variables d'environnement :
DFT_DISPLAY,DFT_BACKGROUND,DFT_WIDTHet compagnie fixent vos préférences une fois pour toutes - CI et scripts :
--check-onlyavec--exit-coderépond « la syntaxe a-t-elle changé ? » sans afficher le diff, et--display jsonest fait pour être analysé
🚀 Pourquoi choisir deb.griffo.io ?
- Debian officiel : n'empaquette pas difftastic du tout — un système standard n'a rien à installer
- cargo install difftastic : à jour, mais c'est une longue compilation avec beaucoup de grammaires tree-sitter, hors d'apt et sans page de manuel
- Archive upstream : le binaire officiel, à retélécharger à la main à chaque version
- deb.griffo.io : dernière version avec mises à jour automatiques
- ✅ Grammaires à jour : la version la plus récente, avec les grammaires tree-sitter qui comprennent les langages que vous écrivez aujourd'hui
- ✅ La seule source apt : difftastic n'est ni dans les archives Debian ni dans celles d'Ubuntu ; ce dépôt empaquette la construction officielle upstream
- ✅ Mises à jour automatiques : les paquets sont mis à jour quelques heures après chaque version upstream
- ✅ Paquet complet : le binaire upstream comme
/usr/bin/difftplus la page de manueldifft.1 - ✅ Deux architectures : amd64 (build musl statique, sans dépendances) et arm64
- ✅ Multi-distribution : fonctionne sur Bookworm, Trixie, Forky et Sid
- ✅ Maintenance simple : des mises à jour avec les commandes apt habituelles
📦 Dépôt de construction du paquet
Les paquets Debian sont construits et maintenus automatiquement dans ce dépôt GitHub :
- 🔀 difftastic-debian - Constructions des dernières versions
🔗 Paquets associés
Également disponibles sur deb.griffo.io :
- lazygit - Interface git en terminal pour indexer hunks et lignes
- Jujutsu - VCS compatible Git avec des rebases de premier ordre
- ripgrep - Recherche récursive rapide dans la même arborescence
- Neovim - Éditeur pour ouvrir ce que le diff a désigné