Was ist difftastic?
difftastic — der Befehl heißt difft — ist ein struktureller Diff. Statt Zeilen zu vergleichen, parst es beide Dateien mit tree-sitter, baut für jede Seite einen Syntaxbaum und zeigt, welche Syntax sich wirklich geändert hat. Neu eingerückte Blöcke, umgebrochene Argumentlisten oder eine verschobene Klammer sind kein Diff mehr — während eine umbenannte Variable in neu formatiertem Code sofort auffällt.
⚡ Hauptfunktionen von difftastic
🌳 Syntaxbewusste Diffs
Beide Seiten werden zu Syntaxbäumen geparst und als Struktur verglichen — Formatierungsrauschen verschwindet, echte Änderungen treten hervor.
🧩 Über 30 Sprachen
Rust, Python, TypeScript, Go, C, C++, Java, Ruby, YAML, JSON, HTML, CSS, Markdown und viele mehr — difft --list-languages zeigt die vollständige Liste mit Endungen.
🪟 Nebeneinander oder inline
--display wählt side-by-side, side-by-side-show-both, inline oder maschinenlesbares JSON.
🔗 Drop-in für Git
Funktioniert als externer Diff-Befehl für git und genauso für Mercurial, Jujutsu und Fossil.
🚦 Ehrlicher Fallback
Unbekannte Endung, riesige Datei oder zu viele Parse-Fehler: dann ein zeilenbasierter Diff mit Wort-Hervorhebung statt eines Fehlers.
🗂️ Verzeichnisse und Konflikte
Zwei Verzeichnisse in einem Befehl vergleichen — oder difftastic eine Datei mit Merge-Konfliktmarkierungen geben und den Konflikt als Diff lesen.
apt upgrade hält dich auf der neuesten Version.
📦 Installation aus deb.griffo.io
Schritt 1: Repository hinzufügen
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🆓 Es gibt einen für immer kostenlosen Spiegel. deb-free.griffo.io liefert Pakete für immer kostenlos — ohne Konto, ohne Abo, höchstens 2 Monate hinter Upstream, Sicherheitsfixes sofort. Derzeit enthält er cliamp, Ghostty, lazydocker, Oh My Posh und Zed; difftastic ist nicht dabei, deshalb führt heute nur das Repository oben dorthin — auf Anfrage kann es aufgenommen werden.
🧩 Zur extrepo-Option. extrepo ist Debians eigenes Werkzeug für externe Repositories: Es legt die Sources-Datei an und installiert den Signaturschlüssel für dich, nachdem es ihn gegen signierte Metadaten geprüft hat. Dieses Repository ist dort als griffo registriert, der für immer kostenlose Spiegel als griffo-free. Unter Debian (bookworm, trixie, forky und sid) sind die Befehle oben damit die gesamte Einrichtung.
extrepo richtet nur die Sources-Datei und den Schlüssel ein; die Zugangsdaten eines Abos gehören weiterhin in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu wird nicht abgedeckt, denn extrepo veröffentlicht Metadaten nur für Debian-Suites: dort nimmst du die Befehle mit sudo oder als root.
Schritt 2: difftastic installieren
# Neuestes difftastic installieren
sudo apt install difftastic
# Installation überprüfen
difft --version# Neuestes difftastic installieren
apt install difftastic
# Installation überprüfen
difft --versionSchritt 3: In git einbinden
# Zwei Dateien direkt vergleichen
difft old.py new.py
# Oder git difftastic für jeden Diff aufrufen lassen
git config --global diff.external difft
# Der normale git diff ist weiter nur eine Option entfernt
git --no-ext-diff diff
# Die Handbuchseite liegt dem Paket bei
man difft🎯 Grundlegende Verwendungsbeispiele
Dateien und Verzeichnisse vergleichen:
# Zwei Dateien, nebeneinander
difft before.rs after.rs
# Eine Spalte, näher an klassischer Diff-Ausgabe
difft --display inline before.ts after.ts
# Zwei Verzeichnisse, unveränderte Dateien überspringen
difft old/ new/ --skip-unchanged --sort-paths
# Welche Sprachen versteht dieser Build?
difft --list-languagesAls git-Diff verwenden:
# Einmalig: difftastic nur für diesen Diff
GIT_EXTERNAL_DIFF=difft git diff
# Strukturelle Diffs durch die gesamte Historie
GIT_EXTERNAL_DIFF=difft git log -p --ext-diff
# Als difftool registrieren
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git difftool --tool difftastic
# Ein git-Alias für ein strukturelles Log
git config --global alias.dlog '!GIT_EXTERNAL_DIFF=difft git log -p --ext-diff'Ausgabe anpassen:
# Änderungen nur in Kommentaren ignorieren
difft --ignore-comments a.go b.go
# Mehr Kontext, Tabs als zwei Leerzeichen
difft --context 5 --tab-width 2 a.py b.py
# Für Skripte: gab es überhaupt eine syntaktische Änderung?
difft --check-only --exit-code a.json b.json
# Standardwerte für jeden Aufruf über die Umgebung
export DFT_DISPLAY=inline DFT_BACKGROUND=light🔧 Tool-Integrationen
difftastic fügt sich in die Werkzeuge ein, die dir schon Diffs zeigen:
- git:
GIT_EXTERNAL_DIFF,diff.externaloder eindifftool-Eintrag — mit--ext-diffauch fürgit log -pundgit show - Jujutsu: als Diff-Befehl in
jjsetzen und strukturelle Diffs in einem Git-kompatiblen Workflow bekommen - Mercurial und Fossil: beide akzeptieren einen externen Diff-Befehl — dasselbe Binary bedient jedes Repository
- Umgebungsvariablen:
DFT_DISPLAY,DFT_BACKGROUND,DFT_WIDTHund Verwandte setzen deine Standards einmalig - CI und Skripte:
--check-onlymit--exit-codebeantwortet „hat sich die Syntax geändert?“ ohne Ausgabe, und--display jsonist zum Parsen gemacht
🚀 Warum deb.griffo.io?
- Offizielles Debian: paketiert difftastic überhaupt nicht — auf einem Standardsystem gibt es nichts zu installieren
- cargo install difftastic: aktuell, aber ein langer Build mit vielen tree-sitter-Grammatiken, außerhalb von apt und ohne Handbuchseite
- Upstream-Tarball: das offizielle Binary, das du für jedes Release von Hand neu holst
- deb.griffo.io: neueste Version mit automatischen Updates
- ✅ Aktuelle Grammatiken: das neueste Release mit tree-sitter-Grammatiken, die die Sprachversionen verstehen, die du heute schreibst
- ✅ Die einzige apt-Quelle: difftastic ist weder in den Debian- noch in den Ubuntu-Archiven; dieses Repository paketiert den offiziellen Upstream-Build
- ✅ Automatische Updates: Pakete werden innerhalb von Stunden nach Upstream-Releases aktualisiert
- ✅ Vollständiges Paket: das Upstream-Binary als
/usr/bin/difftplus die Handbuchseitedifft.1 - ✅ Zwei Architekturen: amd64 (statischer musl-Build ohne Bibliotheksabhängigkeiten) und arm64
- ✅ Multi-Distribution: läuft auf Bookworm, Trixie, Forky und Sid
- ✅ Einfache Wartung: Updates mit den üblichen apt-Befehlen
📦 Paket-Build-Repository
Die Debian-Pakete werden in diesem GitHub-Repository automatisch gebaut und gepflegt:
- 🔀 difftastic-debian - Builds der neuesten Releases
🔗 Verwandte Pakete
Ebenfalls verfügbar über deb.griffo.io:
- lazygit - Terminal-git-UI zum Stagen von Hunks und Zeilen
- Jujutsu - Git-kompatibles VCS mit erstklassigen Rebases
- ripgrep - Schnelle rekursive Suche im gleichen Baum
- Neovim - Editor, um das Gefundene direkt zu öffnen