Seguramente alguna vez has tenido dos archivos: uno contiene tu código “original” y otro código “con cambios”, seguramente también te gustaría ver las diferencias entre ambos y la forma más común de hacerlo sería abriendo los dos archivos al mismo tiempo y compararlos, sin embargo, si es muy largo puede que sea una tarea más difícil de lo esperado. Con el comando:


diff  archivo_old  archivo_new

Imagina que tienes los siguientes archivos:

# archivo_original.py
fruits = ["apple", "orange", "blueberry"]
for fruit in fruits:
    print (fruits)


# archivo_correccion.py
fruits = ["apple", "orange", "blueberry"]
for fruit in fruits:
    print(fruit)

Usaremos el comando diff archivo_original.py archivo_correcciones.py y la consola nos mostrar lo siguiente:

3c3
<     print (fruits)
\ No newline at end of file
---
>     print(fruit)
\ No newline at end of file

Podemos ver que la linea 3 de ambos archivos es diferente y diff nos lo denota.

Simbología:

< la linea fue eliminada en el primero archivo.
> la linea fue agregada en el segundo archivo.


a Add the lines.
c Change the lines.
d Delete the lines.


Los números representan el cambio en cierta línea, en nuestro ejemplo el cambio estaba en la linea 3 de ambos archivos por eso aparece 3c3.


Si aun no es tan claro donde está el cambio podemos usar:

diff -u  archivo_old  archivo_new

-u significa unified format


Para nuestro ejemplo usamos diff -u archivo_original.py archivo_correcciones.py y obtenemos:

--- archivo_original.py	2020-04-30 22:46:39.000000000 -0500
+++ archivo_correcciones.py	2020-04-30 22:46:49.000000000 -0500
@@ -1,3 +1,3 @@
 fruits = ["apple", "orange", "blueberry"]
 for fruit in fruits:
-    print (fruits)
\ No newline at end of file
+    print(fruit)
\ No newline at end of file


Sin embargo hay muchas otras herramientas a parte de diff como por ejemplo wdiff que resalta las palabras que han cambiado en un archivo en lugar de trabajar línea por línea como lo hace diff.

También hay herramientas gráficas que muestran archivos uno al lado del otro y resaltan las diferencias mediante el uso del color. Algunos ejemplos de esto incluyen: meld, KDiff3, o vimdiff.


"Fusionar" los cambios:

Puedes guardar las diferencias que obtienes de usar el comando diff en un archivo .diff

diff -u  archivo_old archivo_new > cambios_dif

¿Y para qué sirve un archivo.diff?
Para “parchar”, sí, puedes usar el archivo .diff para parchar un código con las diferencias usando el comando patch.

patch   archivo_a_parchar   <   archivo_diff

¡Así logras ver cambios y hacer cambios desde tu terminal usando solo dos simples comandos diff y patch!
Genial, ¿no?