Linux - Utilities diff e patch

Come creare e applicare patches

Letteralmente il significato di patch si riferisce ad una 'toppa' o all'azione di 'rattoppare' qualcosa.
Dal punto di vista informatico, una patch si riferisce solitamente ad una modifica di una parte di un programma, che puo' essere costituito anche da piu' files, al fine di apportare migliorie o di rimuovere malfunzionamenti.
Di solito le modifiche apportate sono minime rispetto alle dimensioni dell'intero programma sorgente. Pertanto, qualora si possieda gia' la precedente versione del programma (in formato sorgente), e' assai piu' conveniente scaricare da Internet (specie se non si dispone di banda sufficiente) la 'patch' da applicare, piuttosto che l'intero programma nella nuova versione. Questo e' tanto piu' vero quanto piu' e' lento il collegamento, tanto piu' e' grande il nuovo sorgente e tanto piu' e' piccola la patch.

diff e patch sono due comandi presenti nei sistemi Unix (e quindi anche su Linux) che permettono di creare e applicare i files di patch.


Principalmente diff confronta 2 files o 2 sottodirectories riportando in output le differenze riscontrate.
diff viene anche impiegata per generare un file di patch.


Il comando patch permette di applicare le differenze ad alcuni file, al fine di effettuare aggiornamenti da vecchie a nuove versioni.
Normalmente il file con le differenze e' generato tramite il comando diff.
In conclusione diff genera le differenze fra due file generici file_old e file_new producendo un file che, a sua volta, fornito in input al comando patch ed in possesso del file file_old permette la ricostruzione del file_new.

Come caso particolare diff permette anche di riapplicare il file prodotto da diff in modo inverso, cioe' dal file file_new e' possibile riottenere il file_old.


Esempio

A titolo di esempio, si supponga di disporre della versione originale dei sorgenti nella directory (e sue sotto-directory) dir_orig, mentre i sorgenti modificati siano nella directory (e sue sotto-directory) dir_release.
Il comando diff per generare il file di patch dovra' essere:
diff -u --recursive --new-file dir_orig dir_release >file_patch # crea il file di patch diff -urN dir_orig dir_release >file_patch # stessa cosa

Supponendo di volere applicare la patch contenuta in file_patch alla directory dir_release dove sia contenuta la versione originale del programma, occorre portarsi alla parent directory (directory genitrice) di dir_release ed eseguire il comando:

patch -p0 <file_patch # applica la patch creata con diff

Indice Linux Indice Linux
At Home Umberto Zappi Home Page