Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Generar (diff) y aplicar (patch) parches

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

diff, patch, parche
Category: GNU, GNU/Linux, Prompt