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: