Cómo Comparar Archivos de Texto y Encontrar Diferencias Sin Ningún Software
Aprende cómo funcionan los algoritmos de diff de texto, cómo leer la salida de diff unificado, la diferencia entre diffs a nivel de línea y de palabra, y cómo funciona git diff bajo el capó.
Todo desarrollador ha vivido esta situación: dos versiones de un archivo que deberían ser idénticas, pero algo cambió. Tal vez es un archivo de configuración que fue editado manualmente en un servidor. Tal vez es un contrato que volvió de un abogado con cambios no declarados. Tal vez es un archivo de traducción que devolvió un proveedor y necesitas verificar que no se eliminó nada por accidente. En todos estos casos, la respuesta es la misma: ejecuta un diff.
Puedes comparar dos bloques de texto al instante con la Herramienta de Diferencias de Texto de BrowseryTools — gratuita, sin registro, todo se ejecuta en tu navegador.
Por qué importa la comparación de textos
La comparación de textos no es solo una herramienta para desarrolladores. Cualquier situación en la que existen dos versiones de un documento y se necesita detectar las diferencias es un problema de diff:
- Revisión de código — entender qué cambió entre dos versiones del código fuente antes de aprobar una fusión
- Comparación de contratos y documentos legales — identificar exactamente qué cláusulas se añadieron, eliminaron o modificaron entre borradores
- Gestión de configuración — confirmar que un archivo de configuración desplegado coincide con la versión en el control de fuente
- Verificación de contenido traducido — comprobar que un documento traducido cubre todas las mismas secciones que el original
- Validación de datos — comparar exportaciones CSV de dos sistemas para encontrar discrepancias
- Corrección de pruebas — detectar cambios no intencionados entre el borrador de un documento y su versión publicada
Cómo funcionan los algoritmos de diff
El problema principal que resuelve un algoritmo de diff es: dado dos secuencias A y B, encontrar el conjunto mínimo de ediciones (inserciones y eliminaciones) necesarias para transformar A en B. Esto es formalmente el problema de la Subsecuencia Común Más Larga (LCS). El diff luego reporta lo que no estaba en la LCS — las líneas exclusivas de A (eliminaciones) y las líneas exclusivas de B (inserciones).
Dos algoritmos dominan las implementaciones prácticas:
- Myers diff (1986) — el algoritmo detrás del comando
difforiginal de Unix y Git. Eugene Myers lo diseñó para encontrar el script de edición más corto (el diff con el menor número total de inserciones y eliminaciones) en tiempo O(ND), donde N es el tamaño total de ambas entradas y D es el número de diferencias. Es rápido y produce diffs mínimos, pero puede generar una salida contraintuitiva cuando se mueven grandes bloques de código. - Patience diff — desarrollado por Bram Cohen (creador de BitTorrent) y usado por Bazaar, popularizado luego por Kaleidoscope. En lugar de trabajar línea por línea, el patience diff primero empareja las líneas únicas que aparecen exactamente una vez en ambos archivos. Esto produce una salida que preserva mucho mejor los límites de funciones y bloques que el Myers diff para código fuente. Git lo admite mediante
git diff --patience.
Leer la salida de diff unificado
El formato de diff unificado es la salida estándar de git diff y la mayoría de las herramientas de diff. Una vez que entiendes la notación, se vuelve inmediatamente legible.
--- a/config.yml (archivo original) +++ b/config.yml (archivo modificado) @@ -10,7 +10,8 @@ (cabecera de fragmento) server: host: localhost - port: 3000 + port: 8080 + timeout: 30 debug: false
Los elementos clave que hay que leer:
- Líneas que empiezan con
-— presentes en el original, eliminadas en la nueva versión (mostradas en rojo) - Líneas que empiezan con
+— no estaban en el original, añadidas en la nueva versión (mostradas en verde) - Líneas sin prefijo (espacio) — líneas de contexto sin cambios, mostradas para orientación
- La cabecera de fragmento
@@— se lee como "empezando en la línea 10, mostrando 7 líneas del original; empezando en la línea 10, mostrando 8 líneas de la nueva versión." El formato es@@ -inicio,cantidad +inicio,cantidad @@.
Diff a nivel de palabra vs. línea vs. carácter
La granularidad de un diff determina su utilidad para una tarea determinada.
- Diff a nivel de línea — el predeterminado para código fuente. Cada línea se trata como una unidad atómica. Rápido y apropiado para código donde las líneas son cortas y significativas. Si cambia una sola palabra en un párrafo largo, toda la línea aparece como modificada.
- Diff a nivel de palabra — apropiado para prosa y documentación. Las palabras cambiadas dentro de una línea se resaltan individualmente, dando una señal mucho más clara en documentos con mucho texto. La mayoría de las herramientas de comparación de documentos (Control de cambios de Microsoft Word, historial de versiones de Google Docs) operan a nivel de palabra.
- Diff a nivel de carácter — resalta los cambios de caracteres individuales dentro de las palabras. Más útil para detectar erratas sutiles, cambios de espacios en blanco, caracteres invisibles (espacios de ancho cero, espacios de no ruptura) o diferencias de codificación. Esencial para comparar datos que parecen idénticos visualmente pero difieren a nivel de bytes.
La Herramienta de Diferencias de Texto de BrowseryTools resalta las diferencias en línea, facilitando detectar los cambios de un vistazo sin leer manualmente el formato de diff unificado.
Git diff bajo el capó
Cuando ejecutas git diff, Git calcula el Myers diff entre las versiones de objeto almacenadas en su base de datos de objetos. Algunos indicadores útiles cambian el comportamiento:
git diff # cambios no preparados vs. último commit git diff --staged # cambios preparados vs. último commit git diff HEAD~3 # estado actual vs. 3 commits atrás git diff main...feature # lo que la rama feature añade a main git diff --word-diff # resaltado a nivel de palabra git diff --patience # usa el algoritmo patience (mejor para código) git diff --stat # resumen: archivos cambiados, inserciones, eliminaciones
Sobre git diff main...feature específicamente: la notación de triple punto muestra lo que la rama feature ha añadido desde que divergió de main, excluyendo los cambios que hayan ocurrido en main desde el punto de bifurcación. Esto es casi siempre lo que quieres para la revisión de pull requests, en lugar del doble punto main..feature que compara directamente los extremos actuales de ambas ramas.
Casos de uso prácticos
Comparar archivos de configuración
Los archivos de configuración (YAML, TOML, JSON, .env) son fuentes frecuentes de errores en producción cuando las versiones desplegadas divergen de las versiones controladas por versión. Antes de depurar un misterioso problema en producción, comparar la configuración en vivo con la configuración esperada a menudo revela la causa de inmediato.
Comparación de contratos y documentos
Cuando un borrador de contrato regresa de la otra parte, nunca confíes en un resumen de los cambios. Exporta ambas versiones a texto plano y ejecuta un diff. Los abogados suelen cambiar términos definidos, añadir límites de responsabilidad o alterar plazos de notificación de maneras que una lectura rápida no detecta. Un diff a nivel de palabra hace visible cada cambio.
Verificación de documentos traducidos
Cuando trabajas con contenido traducido, compara la estructura del documento traducido con la fuente. Un diff estructural de los encabezados de secciones y los recuentos de párrafos revela si alguna sección fue omitida o fusionada accidentalmente durante la traducción.
Comparativa de herramientas de diff
- git diff — integrado, a nivel de línea, formato de diff unificado, sin GUI. La base de referencia para todo trabajo con código.
- vimdiff — diff en paralelo basado en terminal dentro de Vim. Potente para comparaciones rápidas sin salir del terminal; curva de aprendizaje pronunciada.
- Beyond Compare — herramienta de escritorio comercial con sincronización de carpetas, diff binario y fusión a tres vías. El estándar de oro para la comparación de documentos no técnicos.
- Meld — herramienta GUI de diff gratuita y multiplataforma con soporte de fusión a tres vías. La mejor alternativa gratuita a Beyond Compare.
- BrowseryTools Text Diff — instantáneo, basado en navegador, sin instalación. Ideal para comparaciones puntuales rápidas, especialmente para texto que no querrías pegar en un servicio en línea.
Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →