Aprende leyendo en orden

Diferencias entre archivos — diff

Mira cómo comprobar las diferencias entre dos archivos con diff. Leerás qué líneas se añadieron, eliminaron o cambiaron, con diagramas y una terminal práctica dentro de tu navegador.

Cuándo usar diff

Úsalo cuando quieras comprobar qué cambiaste después de editar un archivo, o si dos archivos tienen el mismo contenido. Le pasas dos archivos y muestra solo las líneas que difieren.

Comparar dos archivos — diff

diff compara dos archivos y muestra solo las partes que difieren. Lo usas como diff old.txt new.txt, tratando el primer archivo como la versión antigua (antes) y el segundo como la nueva (después). Las líneas iguales no se imprimen — solo se reportan las diferencias.

Comparar dos archivos con diff
old.txtapple / banana / cherrynew.txtapple / grape / cherrydiffSalida-banana+grapeantiguonuevomuestra el difflos dos archivos comparados
diff old.txt new.txt alinea los dos archivos y muestra solo la segunda línea que difiere como -banana (antiguo) y +grape (nuevo). Las iguales apple y cherry no se imprimen.

En la terminal del navegador, diff muestra las diferencias en formato unificado. Los --- y +++ iniciales son los nombres de los dos archivos comparados, la línea @@ indica dónde ocurrió el cambio, y en el cuerpo cada línea eliminada empieza con - y cada línea añadida con +. Las líneas sin cambios empiezan con un espacio y aparecen al lado como contexto.

SímboloSignificado
--- old.txtNombre del primer archivo (antiguo) comparado
+++ new.txtNombre del segundo archivo (nuevo) comparado
@@ -N,M +N,M @@Información de posición de dónde ocurrió el cambio
- líneaUna línea eliminada (estaba en el archivo antiguo)
+ líneaUna línea añadida (está en el archivo nuevo)
línea (espacio al inicio)Una línea sin cambios mostrada junto como contexto
Leer el formato unificado
Línea eliminada(archivo antiguo)@@ -1,3 +1,3 @@Indica dóndeocurrió el cambio- banana+ grapeLínea añadida(archivo nuevo)
En formato unificado, @@ indica la posición del cambio, - una línea eliminada (antiguo) y + una línea añadida (nuevo). Las líneas sin cambios aparecen al lado con un espacio al inicio.
printf 'apple\nbanana\ncherry\n' > old.txt   # crea la muestra
printf 'apple\ngrape\ncherry\n' > new.txt    # una muestra que difiere por una línea
diff old.txt new.txt
--- old.txt
+++ new.txt
@@ -1,3 +1,3 @@
 apple
-banana
+grape
 cherry

① Ejecuta printf 'apple\nbanana\ncherry\n' > old.txt para crear el primer archivo de muestra.

② Ejecuta printf 'apple\ngrape\ncherry\n' > new.txt para crear el segundo archivo de muestra, que difiere solo en la línea 2.

③ Pasa los dos archivos a diff en este orden y lee qué líneas reciben los marcadores - (eliminada) y + (añadida). (Ejecútalo correctamente y aparecerá la explicación).

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Leer añadidos y eliminaciones

Las diferencias no son solo reescrituras. Cuando se añade una línea solo en el archivo de la derecha, obtienes únicamente una línea +; cuando se elimina una línea del archivo de la izquierda, obtienes únicamente una línea -. En lugar de que - y + aparezcan en pareja como en una reescritura, que aparezca solo uno de ellos es la señal de un añadido o una eliminación. Invierte el orden en que comparas y la misma diferencia cambia entre + (añadida) y - (eliminada).

printf 'one\ntwo\n' > base.txt        # crea la muestra
printf 'one\ntwo\nthree\n' > more.txt  # una muestra con una línea añadida
diff base.txt more.txt
--- base.txt
+++ more.txt
@@ -1,2 +1,3 @@
 one
 two
+three
Invertir el orden cambia + y -
diffbase.txt more.txtInvierte el orden y+ y - se intercambiandiffmore.txt base.txt+ three(añadida)- three(eliminada)+ aparece- aparece
Con los mismos dos archivos, diff base.txt more.txt muestra +three (añadida), mientras que el invertido diff more.txt base.txt muestra -three (eliminada).

① Ejecuta printf 'one\ntwo\n' > base.txt para crear la primera muestra de dos líneas.

② Ejecuta printf 'one\ntwo\nthree\n' > more.txt para crear la segunda muestra con una tercera línea añadida.

③ Compara con diff en el orden base.txtmore.txt y confirma que la línea añadida empieza con +.

④ Luego invierte el orden a more.txtbase.txt y confirma que la misma diferencia se muestra como - (eliminada), y que invertir el orden cambia + y -.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

diff y patch, y cómo lo muestran otros entornos

El diff en formato unificado que produce diff puede aplicarse a otro archivo tal cual con el comando patch. Cuando un equipo intercambia correcciones, pasarse este diff (un parche) de un lado a otro es común. Este curso se centra en leer diffs y no cubre aquí cómo aplicarlos.

En la terminal del navegador de este curso, diff produce el formato unificado directamente. Con GNU diff en Ubuntu y similares, diff a secas muestra el formato tradicional usando 2c2 y < / >, y al añadir diff -u se obtiene el mismo formato unificado que se usa en este curso.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1En la salida en formato unificado de diff, ¿qué símbolo empieza una línea eliminada (una que estaba en el archivo antiguo)?

Pregunta 2¿Qué muestra una línea como @@ -1,3 +1,3 @@?

Pregunta 3Cuando se añade una línea solo en el archivo de la derecha, ¿cómo se ve la salida de diff?