bitlvl
IT

Strumento diff

Incolla la versione vecchia e quella nuova. Il risultato mostra ogni riga modificata con i caratteri cambiati evidenziati, più un diff unificato pronto per patch -p0.

Scarica .patch

Diff unificato

  

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Come funziona diff

Un diff trova il più piccolo insieme di inserimenti ed eliminazioni che trasforma una sequenza di righe in un’altra. L’algoritmo classico (Myers, 1986, usato da git e GNU diff) trova la sottosequenza comune più lunga in tempo proporzionale al numero di differenze, quindi confrontare due file grandi quasi identici è veloce. Questa pagina lo esegue prima sulle righe e poi sui caratteri dentro ogni coppia modificata, ed è ciò che fa comparire una modifica di una parola come una sola parola evidenziata invece di due righe intere.

Leggere un diff unificato

--- old.txt
+++ new.txt
@@ -12,7 +12,8 @@
 riga di contesto
-riga rimossa
+riga aggiunta
+un’altra riga aggiunta
 riga di contesto

L’intestazione @@ indica numero di riga e lunghezza dell’hunk in ciascun file. Le righe che iniziano con uno spazio sono contesto invariato, - sono solo nel file vecchio, + solo nel nuovo. patch -p0 < changes.patch lo applica; funziona anche git apply. Le righe di contesto permettono a patch di trovare il punto giusto anche se il file si è spostato.

Opzioni

Ignorare gli spazi tratta come uguali le righe che differiscono solo per spazi o tab, il che nasconde il rumore della riformattazione e mostra le modifiche reali. Ignorare maiuscole/minuscole fa lo stesso per le lettere maiuscole. Il diff unificato mostra comunque le righe originali; le opzioni influenzano solo quali righe contano come modificate.

Limiti

Tutto gira nel tuo browser; qualche migliaio di righe si confronta in ben meno di un secondo. Input molto grandi (oltre circa 2.000 righe per lato con molte differenze) vengono rifiutati per mantenere la pagina reattiva; per quelli, usa diff o git diff --no-index a b in locale.

Domande

Come confronto due file?

Apri ciascuno in un editor e copia il contenuto nelle due caselle. Per i file su un server, diff -u vecchio nuovo o git diff --no-index vecchio nuovo producono lo stesso formato unificato senza lasciare il terminale.

Cosa significa l’evidenziazione dentro una riga?

Dentro una coppia di righe modificate, i caratteri che differiscono vengono marcati; quelli invariati sono mostrati normalmente. È un secondo diff eseguito a livello di carattere su quella coppia.

Può confrontare JSON o codice?

Sì; confronta testo. Per il JSON, formatta prima entrambi i lati (lo fa il formattatore JSON) così ogni chiave finisce sulla propria riga e il diff mostra le modifiche reali invece di un’unica riga gigante.

Il mio testo viene caricato?

No. Il confronto gira in JavaScript nel tuo browser. Il sito non ha un backend che possa riceverlo.