Para comparar textos, pega dos, o dos versiones del mismo archivo, y la herramienta te muestra qué líneas se añadieron, cuáles se borraron y qué cambió dentro de cada línea, palabra por palabra o letra por letra. Puedes verlo lado a lado o en el formato unificado de git diff, y copiarlo como parche. Todo se calcula en tu navegador: los textos no se envían a ningún sitio.
Compara por líneas, como diff y git diff. Cada texto puede tener hasta 20,000 líneas. Si los dos son casi completamente distintos (más de 3,000 líneas cambiadas), la herramienta te pedirá trozos más pequeños. Las líneas iguales lejos de los cambios se pliegan; pulsa sobre ellas para verlas.
Cómo leer el resultado
- En rojo, las líneas que están en el original y no en el modificado: se borraron.
- En verde, las líneas nuevas del modificado: se añadieron.
- Una línea cambiada aparece como borrada y añadida a la vez. Dentro, el color más intenso marca las palabras o los caracteres que cambiaron.
- Los números son los de línea de cada texto, para encontrarlas en tu editor.
Las opciones
- Ignorar mayúsculas:
Holayholacuentan como iguales. - Ignorar espacios al final: los espacios y tabuladores al final de la línea, que no se ven pero sí cambian el archivo, no cuentan.
- Ignorar líneas en blanco: los cambios que solo añaden o quitan líneas vacías se muestran en gris y no se cuentan, como
diff -B. - Por palabras o por caracteres: por palabras es más fácil de leer en textos y código; por caracteres encuentra una sola letra cambiada en un número o una clave.
El formato unificado
Es el formato de diff -u, de git diff y de los parches. Empieza con el nombre de los dos archivos (--- el original, +++ el modificado) y sigue con trozos que empiezan así: @@ -1,5 +1,6 @@. Quiere decir que el trozo empieza en la línea 1 del original y ocupa 5 líneas, y en el modificado empieza en la línea 1 y ocupa 6. Debajo, las líneas que empiezan por un espacio son iguales (el contexto, 3 líneas antes y después de cada cambio), las que empiezan por - se borran y las que empiezan por + se añaden. Puedes guardar lo que copia la herramienta en un archivo cambios.diff y aplicarlo con patch -p0 < cambios.diff o git apply si cambias los nombres por los de tus archivos.
Cómo encuentra las diferencias
Con el algoritmo de Myers, de 1986, el mismo que usan git diff y GNU diff. Busca el camino más corto para convertir un texto en el otro: el menor número posible de líneas borradas y añadidas. Antes, la herramienta convierte cada línea en un número, para comparar números en lugar de textos, y aparta el principio y el final que coinciden. Lo explicamos paso a paso, con una animación, en El algoritmo de Myers: así encuentra git diff las diferencias.
Por eso, el resultado puede no ser idéntico al de difflib de Python, que usa otro método (el de Ratcliff y Obershelp) y no busca el diff más corto, sino uno que suela parecerle más natural a una persona. Los dos son correctos: llevan del original al modificado.
Comparar textos en Python
Con difflib.unified_diff, de la biblioteca estándar:
import difflib
original = """def saluda(nombre):
texto = "Hola, " + nombre
print(texto)
return texto
""".splitlines()
modificado = """def saluda(nombre, signo="!"):
texto = "Hola, " + nombre + signo
print(texto)
return texto
""".splitlines()
# El mismo formato que diff -u y git diff (lineterm="" porque las líneas ya no llevan salto)
for linea in difflib.unified_diff(original, modificado, "original.py", "modificado.py", lineterm=""):
print(linea)
# Parecido entre 0 y 1
print(round(difflib.SequenceMatcher(None, original, modificado).ratio(), 2))$ python3 diff.py--- original.py
+++ modificado.py
@@ -1,4 +1,4 @@
-def saluda(nombre):
- texto = "Hola, " + nombre
+def saluda(nombre, signo="!"):
+ texto = "Hola, " + nombre + signo
print(texto)
return texto
0.5Más herramientas para desarrolladores, como el probador de expresiones regulares y el formateador de JSON, en decodigo.com/herramientas. Si usas Git, repasa las órdenes de Git que de verdad se usan.
Algoritmo: Eugene W. Myers, «An O(ND) Difference Algorithm and Its Variations», Algorithmica 1, 251-266 (1986); la implementación de GNU diff lo cita en diffseq.h. Python: documentación de difflib. Pruebas de la herramienta: en 3,000 pares de textos al azar, el número de líneas borradas y añadidas es siempre el mínimo (comparado con la subsecuencia común más larga, calculada por programación dinámica), y el diff unificado, aplicado al original, da exactamente el modificado; en 1,000 pares de líneas, el detalle por palabras o caracteres también es mínimo y reconstruye las dos líneas.