Guida all’uso di diff e patch

Lavorando su Linux o Unix in generale può capitare di dover applicare delle patch a dei sorgenti. Personalmente non ne ho mai applicate molte, ho sempre preferito riscaricare il pacchetto completo, già comprensivo delle correzioni, ma ultimamente mi è capitata una situazione nuova.

Mi sono ritrovato a dover creare un elenco delle modifiche effettuate a dei miei sorgenti, per poterle applicare su un altro server. E questa volta, per una serie di ragioni, non era possibile riscaricare l’intero pacchetto.

Mi sono quindi messo a vedere come funzionano i due programmi complementari diff e patch. Definisco diff e patch programmi complementari perché diff serve per creare un elenco delle modifiche tra un file originale e un file modificato, e patch serve per applicare l’elenco delle modifiche sul file originale per trasformarlo nella seconda versione. Vediamo quindi come si usano.

Creazione di patch con diff

Il programma diff consente di creare un file di patch che contiene le differenze la versione originale e la versione corretta. diff è in grado di lavorare sia su singoli file, sia su intere directory, segnandosi le differenze di ogni singolo file. Per creare una patch di un singolo file si usa il seguente formato:

Per creare una patch di un intero albero di sorgenti bisogna prima fare la copia della directory e del suo contenuto.

Successivamente, una volta effettuate le modifiche necessarie sui file contenuti nella directory new/, creaiamo con diff il file di patch (un solo file) che contiene l’elenco di tutte le modifiche apportate:

Applicare una patch con patch

Il comando patch consente di applicare l’elenco delle modifiche, creato precedentemente con il comando diff, all’elenco dei sorgenti da modificare. Esattamente come per il comando diff, anche patch può essere usato per modificare un singolo file o un intero albero di sorgenti. Per modificare un singolo file basta dare il seguente comando:

Non è necessario indicare il nome del file da modificare perché è già contenuto all’interno del file di patch.

L’applicazione del comando patch ad una directory di sorgenti comporta un passo in più. Il file di modifiche generato con diff è relativo a diversi file, che si possono trovare in sottodirectory. Per questo motivo all’interno del file sono memorizzati anche i percorsi dei file da correggere. Andando ad usare il comando patch, dobbiamo indicare quale parte del percorso deve essere ignorata, con il parametro -p.

Se copiamo il file di patch all’interno della directory da modificare, senza addentrarci in ulteriori sottodirectory sarà sufficiente tagliare un solo livello, quindi il parametro sarà -p1. Il comando da dare sarà:

Usando il parametro –dry-run è possibile testare le modifiche senza cambiare alcun file:

Il comando patch consente anche di togliere le modifiche effettuate, usando il parametro -R.

Il parametro -R può servire anche per applicare una patch nel caso, durante la creazione, siano stati scambiati original con new.

Tags: , ,

About the Author

Post a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Top