MiServe DevTools

I tuoi adesivi

Fissa qui gli strumenti. Restano salvati in questo browser.

Confronto testi (diff)

Confronta due testi riga per riga, guarda cosa è stato aggiunto, rimosso e modificato all'interno di ogni riga, e copia il risultato come unified diff.

Funziona nel tuo browser. Nulla di ciò che incolli viene caricato.

Informazioni su questo strumento

Come funziona il confronto

Il confronto cerca l'elenco più breve di righe da togliere dal primo testo e di righe da aggiungergli per trasformarlo nel secondo. Trovare quell'elenco equivale a trovare la sottosequenza comune più lunga (longest common subsequence): la serie più lunga di righe che compaiono in entrambi i testi nello stesso ordine. Questo strumento usa l'algoritmo pubblicato da Eugene Myers nel 1986, quello alla base di GNU diff e predefinito in Git, nella sua variante a spazio lineare, così la memoria usata resta proporzionale alla dimensione dei testi.

Quando una riga rimossa e una aggiunta si trovano nella stessa posizione di un blocco modificato, le due vengono confrontate di nuovo parola per parola e le parole diverse vengono evidenziate. Se le due righe hanno poco in comune, sono mostrate come una semplice rimozione e un'aggiunta, perché evidenziare quasi tutto non direbbe nulla.

Come leggere il risultato

Una riga segnata con − esiste solo nel testo originale, e una riga segnata con + esiste solo nel testo modificato. Una riga modificata compare quindi due volte: una volta rimossa e una volta aggiunta. Le due colonne di numeri sono i numeri di riga nel testo originale e in quello modificato. Il significato è affidato ai simboli; i colori lo ripetono soltanto.

La vista unificata mette tutto in una sola colonna, nell'ordine usato da un file di patch. La vista affiancata tiene ogni testo nella sua colonna e allinea le righe corrispondenti.

Il formato unified diff

Copia come unified diff produce il formato di diff -u e git diff. Le modifiche sono raggruppate in hunk con tre righe invariate di contesto attorno. Ogni hunk inizia con un'intestazione come @@ -1,7 +1,8 @@, che si legge così: sette righe a partire dalla riga 1 dell'originale corrispondono a otto righe a partire dalla riga 1 del testo modificato.

La riga \ No newline at end of file fa parte del formato. Compare quando un testo non termina con un a capo, così che una patch possa ricostruire il file esattamente. Le viste della pagina ignorano questa differenza, perché un'ultima riga che appare identica non dovrebbe essere segnalata come modificata.

Domande

Il testo che confronto viene caricato da qualche parte?

No. Il confronto viene fatto da JavaScript nella scheda del tuo browser. Lo strumento non fa alcuna richiesta di rete con ciò che incolli, e la policy di sicurezza del sito blocca le richieste verso qualsiasi altro host.

Perché una riga risulta modificata se sembra uguale?

Di solito la differenza è invisibile: spazi a fine riga, un tab al posto degli spazi, uno spazio non separabile, o una lettera accentata memorizzata come due caratteri invece di uno. Attiva l'opzione per ignorare le differenze di spazi per escludere i primi tre casi.

Posso applicare il diff copiato con patch?

Sì. Salvalo in un file ed esegui patch con il nome del file da modificare, per esempio: patch notes.txt changes.diff. Se hai copiato il diff con una delle opzioni «Ignora» attiva, le differenze ignorate non ci sono, quindi il file a cui applichi la patch non coinciderà esattamente con il testo modificato.

Quanto possono essere grandi i testi?

Testi di qualche migliaio di righe si confrontano in una frazione di secondo. La pagina disegna al massimo 5.000 righe, mentre il diff copiato contiene sempre tutte le modifiche. Per due testi molto lunghi quasi senza nulla in comune la ricerca viene interrotta prima e il risultato può essere più lungo del necessario.

Altri strumenti in Testo