Hay manuales muy buenos sobre cómo generar parches… este no es uno de ellos, pero es una guía rápida para el 90% de casos.
Para los ejemplos suponemos que tenemos ficheros originales en una carpeta “original” y ficheros modificados en una carpeta “new”.
Trabajando con ficheros
Primero veremos como parchear un único fichero. Usamos el formato unificado (-u). Es el mejor pero “solo” sirve para entornos GNU, es decir todos los Linux y muchos UNIX.
diff -u original/foo.txt new/foo.txt > foo.patch
Podemos ver el parche generado con:
less foo.patch
La sintaxis es (línea o rango de líneas)(orden)(línea o rango de líneas)
Orden puede ser:
c – change – sustituir unas líneas por otras
a – add – añadir líneas
d -delete – borrar líneas
Para aplicar el parche podemos hacer (nombre de fichero implícito en el parche):
patch < foo.patch
O más seguro
patch bar.txt < foo.patch
Si queremos revertir un parche, porque detectamos que introduce un bug pero que el que corrige, por ejemplo, podemos hacer:
patch -R < foo.patch
Trabajando con directorios
Si modificamos varios ficheros, trabajamos con los directorios.
Generamos el parche con:
diff -rupN original/ new/ > codigo.patch
Lo aplicamos con:
patch -p1 < codigo.patch
Para más información, como siempre:
$ man diff
$ man patch
Trabajando con github.com
Los commits de Github pueden bajarse como parches añadiendo “.patch” al URL.
Así bastaría con:
$ wget github.com/URL_COMMIT.patch
$ patch -p1 < URL_COMMIT.patch