Condiviso

VPS

Dedicato

WP Professional

WP Professional Plus

Lo strumento “diff” calcola le differenze tra due file di testo. Questa differenza è chiamata patch. Puoi applicare una patch ad un altro file usando lo strumento “patch”.

diff e patch sono destinati ad essere usati su file di testo. I file che sono binari o manipolati da applicazioni appositamente costruite, come i file .doc, .pdf, .xlsx, o .wav, non funzionano bene con diff e patch.

Perché usare diff e patch?

Ragione 1: diff può essere utile da solo per vedere cosa è cambiato tra i file, anche se non si usa mai patch.

Ragione 2: a volte puoi ottenere patch da terze parti e applicarle ai tuoi file. Questo può essere vantaggioso nei casi in cui i file da patchare sono grandi, ma il numero di cambiamenti è relativamente piccolo: trasferire un file patch è più efficiente che trasferire l’intero file.

Ragione 3: Puoi applicare patch a file che non corrispondono perfettamente al file originale usato in diff.
Per esempio, se usi un CMS con un file di configurazione, e fai modifiche locali a quel file di configurazione, vuoi preservare quelle modifiche locali quando aggiorni il tuo CMS. Copiare la nuova configurazione del fornitore sulla tua versione perderà le tue modifiche. Tuttavia, in molti casi, è ancora possibile utilizzare tranquillamente patch per applicare le modifiche del fornitore dalla versione più recente senza perdere le proprie modifiche.

Che cos’è diff?

diff è un modo per confrontare i file per le differenze (da cui il nome “diff”) dalla riga di comando. Per esempio, se hai un file originale, poi fai delle modifiche e lo salvi con un altro nome, puoi confrontare i due usando diff.

utilizzando l'immagine diff

Sintassi di diff

diff è usato nella riga di comando. La sintassi di base di diff assomiglia a questa:

diff 

Questo comando imposta la struttura di base per confrontare un file con un altro. Ci sono anche opzioni per aggiungere più funzionalità al comando.

Sintassi di base (senza opzioni)

Sostituire e con i nomi reali dei file. Assicurati di includere le estensioni dei file con i nomi dei file. Un comando diff di base senza opzioni può assomigliare a questo:

diff file1.html file2.html

In questo esempio, il comando confronta file1.html e file2.html e mostra le differenze nella linea di comando.

Sintassi di diff (con opzioni)

le opzioni di diff aggiungono più funzionalità ai comandi. Tuttavia, le opzioni cambiano un po’ la sintassi del comando.

Le opzioni di diff vanno tra diff e il primo nome del file:

diff -y file1.html file2.html

Si possono anche combinare più opzioni in un comando. Fatelo aggiungendo tutte le lettere delle opzioni pertinenti dopo il trattino (-). Finirà per assomigliare a questo:

diff -uy file1.html file2.html

Si può anche vedere una variazione che dà ad ogni opzione il proprio trattino (-). Entrambi i metodi per aggiungere opzioni multiple sono validi

diff -u -y file1.html file2.html

Vedi sotto per una lista di opzioni comunemente usate:

Opzione Descrizione
-N Ignora i file assenti
-r Esegue ricorsivamente diff attraverso una directory. Usato per confrontare più file in una volta. Nota: non è la stessa cosa di -R, che è un’opzione patch
-u Visualizza l’output in un formato più facile da leggere. Questo può rimuovere alcune informazioni, come le linee di contesto.
-y Forza l’output per visualizzare le differenze fianco a fianco.

Per altre opzioni, vedere questa lista di opzioni diff di GNU.

diff Output

Quando viene eseguito un comando diff, l’output di base sarà simile a questo:

Usando l’opzione -y cambierà il modo in cui viene visualizzato l’output

11c11< this is text from the original file---> this is the same line from the second, changed file

Nell’output verranno visualizzati solo i cambiamenti, così non dovrai passare al setaccio i due file. Invece, diff confronta e tira fuori i cambiamenti per voi da visualizzare.

Suggerimento

I caratteri “>” e “<” nell’output di diff indicano la direzione del file in cui si trova il contenuto. Così, per il comando “diff file1 file2”, un “<” si riferisce alle linee del file1 e “>” si riferisce alle linee del file2.

content tip image

Come leggere l’output di diff

Ecco una breve guida sulla lettura dell’output di diff.

La prima linea dell’output

La prima linea dell’output indica i numeri di linea che contengono le differenze e il tipo di modifiche che sono state fatte.

diff output image

Se due numeri sono separati da una virgola, questo significa che ci sono cambiamenti dal numero della prima linea fino alla seconda. Nell’immagine di esempio sopra, 11,12 indicherebbe che ci sono cambiamenti sulle linee 11 – 12.

La “c” che separa i numeri di linea nell’esempio sopra indica il tipo di cambiamento avvenuto. Ci sono diverse lettere che indicano diversi tipi di cambiamenti:

Lettera Significato
c Contenuto è stato sostituito
a Il contenuto è stato aggiunto o aggiunto
d Il contenuto è stato eliminato

Quando si usa la patch, che sarà spiegato nella sezione Cos’è la patch? queste lettere saranno importanti.

Il resto dell’output

Il resto dell’output riguarda le effettive differenze tra i file.

Le linee modificate saranno elencate accanto alle parentesi angolari < o >. Tre trattini (—) indicano che la fine della linea del primo file cambia e l’inizio di quella del file successivo. Apparirà così:

< text from file one---> text from file two

Ora che hai una comprensione di base di diff, è il momento di passare a patch.

Che cos’è patch?

atch è un comando che prende l’output da diff e lo mette in un file. Poi, può prendere l’output archiviato e sovrascrivere un altro file con le modifiche. Per esempio, un uso comune è quello di utilizzare la patch per trasferire le modifiche dal file modificato al file originale, rendendoli così identici. Anche se questo può essere fatto anche copiando/incollando il file aggiornato nel file originale, la patch è molto più veloce ed efficiente.

Come usare diff e patch insieme

diff funziona catalogando le modifiche tra i due file o cartelle. Patch può prendere quei cambiamenti, metterli in un file e aggiornare le vecchie versioni con esso.

Opzioni di patch

Il comando patch ha anche il suo set di opzioni per aggiungere funzionalità. Trovi una lista di opzioni comunemente usate qui sotto:

-b Crea un backup del file originale
-i Forza il comando a leggere la patch dal file .patch invece che dallo standard input
-p Indica al comando di togliere il numero di slash dal percorso del file al nome del file. Vedrete che nella maggior parte dei nostri esempi, usiamo -p0 in modo che nessuna barra venga rimossa
-R Rimuove la patch precedente
-s Esegue il comando in silenzio. Mostrerà il processo solo se ci sono errori

Per altre opzioni, vedere questa lista di opzioni patch di GNU.

Creazione di una patch

Creare un file patch è il primo passo per usare patch e diff insieme. Il file patch può essere usato per aggiungere modifiche ad altri file, e quindi è necessario per comandi come Sovrascrivere il file originale con le modifiche.

Per creare un file patch, inserire il comando seguente nella linea di comando:

diff -u file1.html file2.html > patchfile.patch

Nell’esempio precedente, l’output di diff sarà salvato in un file chiamato patchfile.patch. Quando esegui il comando, assicurati di cambiare file1.html e file2.html con i nomi reali dei file.

Sovrascrivere i file con le modifiche

Una volta creato il file patch, puoi usarlo per copiare le modifiche in un altro file. Per esempio, potresti voler sovrascrivere il file1 con le modifiche del file2 aggiornato. Per farlo, potreste usare una sintassi come questa:

patch file1.html patchfile.patch

Sostituite il file1.html con il vostro file originale. Questo sovrascriverà il vecchio contenuto di file1.html con il contenuto modificato di file2.html.

Come invertire una patch

Se volete riportare il file alla sua versione precedente prima di applicare la patch, potete farlo eseguendo questo comando:

patch -p0 -R -i patchfile.patch

La linea di comando vi chiederà di inserire il nome del file che volete ripristinare. Una volta inserito il nome del file, il processo di inversione inizierà. Se ha successo, il file verrà riportato allo stato precedente.

Patch Directories

Utilizzare diff e patch su intere directory è un processo simile a quello che si usa su singoli file.

Il primo passo è quello di creare un file di patch utilizzando il comando:

diff -ruN folder1/ folder2/ > patchfile.patch

Poi, si dovrebbe dare il comando per patchare la cartella originale, che in questo caso è folder1:

patch -s -p0 < patchfile.patch

Se il comando ha successo, la directory originale dovrebbe ora essere aggiornata per corrispondere alla seconda cartella aggiornata.

Lascia un commento

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