¿Qué es difftastic?
difftastic —el comando es difft— es una herramienta de diff estructural. En lugar de comparar líneas, analiza ambos archivos con tree-sitter, construye un árbol de sintaxis por cada lado e informa de qué piezas de sintaxis han cambiado de verdad. Reindentar un bloque, reajustar una lista de argumentos o mover una llave deja de ser un cambio, mientras que una variable renombrada entre código reformateado salta a la vista.
⚡ Funciones clave de difftastic
🌳 Diffs conscientes de la sintaxis
Ambos lados se analizan como árboles de sintaxis y se comparan como estructura: el ruido de formato desaparece y los cambios reales destacan.
🧩 Más de 30 lenguajes
Rust, Python, TypeScript, Go, C, C++, Java, Ruby, YAML, JSON, HTML, CSS, Markdown y muchos más: difft --list-languages imprime la lista completa con sus extensiones.
🪟 En paralelo o en línea
--display elige side-by-side, side-by-side-show-both, inline o JSON legible por máquinas.
🔗 Reemplazo directo en Git
Funciona como comando de diff externo para git, y también para Mercurial, Jujutsu y Fossil.
🚦 Retroceso honesto
Extensión desconocida, archivo enorme o demasiados errores de análisis: cae a un diff por líneas con resaltado por palabras en lugar de fallar.
🗂️ Directorios y conflictos
Compara dos directorios en un solo comando, o pásale un archivo con marcas de conflicto de fusión y lee el conflicto como un diff.
apt upgrade te mantiene en la última versión.
📦 Instalación desde deb.griffo.io
Paso 1: Añadir el repositorio
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🆓 Existe un espejo gratis para siempre. deb-free.griffo.io sirve paquetes gratis para siempre: sin cuenta, sin suscripción, como máximo 2 meses por detrás del upstream, correcciones de seguridad inmediatas. Ahora mismo incluye cliamp, Ghostty, lazydocker, Oh My Posh y Zed; difftastic no está entre ellas, así que hoy el repositorio de arriba es la única forma de instalarlo — pídelo y puede añadirse.
🧩 Sobre la opción extrepo. extrepo es la herramienta propia de Debian para repositorios externos: escribe el archivo de sources e instala la clave de firma por ti, comprobándola antes contra metadatos firmados. Este repositorio está registrado en ella como griffo, y el espejo gratuito para siempre como griffo-free, así que en Debian (bookworm, trixie, forky y sid) los comandos de arriba son toda la configuración.
extrepo solo configura el archivo de sources y la clave: las credenciales de una suscripción siguen yendo en /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu no está cubierto, porque extrepo publica metadatos solo para las suites de Debian: allí usa los comandos con sudo o como root.
Paso 2: Instalar difftastic
# Instalar la última versión de difftastic
sudo apt install difftastic
# Verificar la instalación
difft --version# Instalar la última versión de difftastic
apt install difftastic
# Verificar la instalación
difft --versionPaso 3: Integrarlo en git
# Comparar dos archivos directamente
difft old.py new.py
# O dejar que git llame a difftastic en cada diff
git config --global diff.external difft
# El git diff normal sigue a una opción de distancia
git --no-ext-diff diff
# La página de manual viene en el paquete
man difft🎯 Ejemplos básicos de uso
Comparar archivos y directorios:
# Dos archivos, en paralelo
difft before.rs after.rs
# Una sola columna, más cerca del diff tradicional
difft --display inline before.ts after.ts
# Dos directorios, omitiendo los archivos que no cambiaron
difft old/ new/ --skip-unchanged --sort-paths
# ¿Qué lenguajes entiende esta compilación?
difft --list-languagesUsarlo como diff de git:
# Puntual: difftastic solo para este diff
GIT_EXTERNAL_DIFF=difft git diff
# Diffs estructurales por todo el historial
GIT_EXTERNAL_DIFF=difft git log -p --ext-diff
# Registrarlo como difftool
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git difftool --tool difftastic
# Un alias de git para un log estructural
git config --global alias.dlog '!GIT_EXTERNAL_DIFF=difft git log -p --ext-diff'Ajustar la salida:
# Ignorar los cambios que solo tocan comentarios
difft --ignore-comments a.go b.go
# Más contexto, y tabulaciones de dos espacios
difft --context 5 --tab-width 2 a.py b.py
# Para scripts: ¿hubo algún cambio sintáctico?
difft --check-only --exit-code a.json b.json
# Valores por defecto para cada invocación, desde el entorno
export DFT_DISPLAY=inline DFT_BACKGROUND=light🔧 Integraciones con otras herramientas
difftastic encaja en las herramientas que ya te muestran diffs:
- git:
GIT_EXTERNAL_DIFF,diff.externalo una entradadifftool; con--ext-difftambién engit log -pygit show - Jujutsu: configúralo como comando de diff en
jjy tendrás diffs estructurales en un flujo compatible con Git - Mercurial y Fossil: ambos aceptan un comando de diff externo, así que el mismo binario sirve para todos tus repositorios
- Variables de entorno:
DFT_DISPLAY,DFT_BACKGROUND,DFT_WIDTHy compañía fijan tus valores por defecto - CI y scripts:
--check-onlycon--exit-coderesponde «¿cambió la sintaxis?» sin imprimir el diff, y--display jsonestá hecho para analizarse
🚀 ¿Por qué elegir deb.griffo.io?
- Debian oficial: no empaqueta difftastic en absoluto: un sistema recién instalado no tiene nada que instalar
- cargo install difftastic: actualizado, pero es una compilación larga con muchas gramáticas de tree-sitter, queda fuera de apt y sin página de manual
- Tarball upstream: el binario oficial, descargado a mano en cada versión
- deb.griffo.io: última versión con actualizaciones automáticas
- ✅ Gramáticas al día: la versión más reciente, con las gramáticas de tree-sitter que entienden los lenguajes que escribes hoy
- ✅ La única fuente apt: difftastic no está ni en los archivos de Debian ni en los de Ubuntu; este repositorio empaqueta la compilación oficial upstream
- ✅ Actualizaciones automáticas: los paquetes se actualizan pocas horas después de cada versión upstream
- ✅ Paquete completo: el binario upstream como
/usr/bin/difftmás la página de manualdifft.1 - ✅ Dos arquitecturas: amd64 (compilación estática con musl, sin dependencias) y arm64
- ✅ Multidistribución: funciona en Bookworm, Trixie, Forky y Sid
- ✅ Mantenimiento sencillo: actualizaciones con los comandos apt de siempre
📦 Repositorio de compilación del paquete
Los paquetes de Debian se compilan y mantienen automáticamente en este repositorio de GitHub:
- 🔀 difftastic-debian - Compilaciones de las últimas versiones
🔗 Paquetes relacionados
También disponibles en deb.griffo.io:
- lazygit - Interfaz git en terminal para preparar hunks y líneas
- Jujutsu - VCS compatible con Git y rebases de primera clase
- ripgrep - Búsqueda recursiva rápida por el mismo árbol
- Neovim - Editor para abrir lo que el diff señaló