Confronto delle differenze fra testi

Strumento che confronta due testi riga per riga e mostra con colori distinti le righe aggiunte e quelle eliminate. Utile per verificare le modifiche a un file di configurazione, per la revisione di uno scritto e per le revisioni del codice senza sistemi di controllo di versione. Il calcolo avviene interamente nel navigatore e quanto inserite non è trasmesso ad alcun servente.

Confrontare due testi riga per riga

È lo strumento cui ricorrere quando si vuole stabilire che cosa sia cambiato in un file di configurazione, o in quale punto uno scritto sia stato rivisto. Mette due testi l'uno contro l'altro riga per riga e segna con colori distinti le righe aggiunte e quelle tolte. Tutto viene calcolato dentro il browser, sicché nulla di ciò che incollate lascia il vostro apparecchio.

Nel leggere il risultato giova sapere che un algoritmo di confronto cerca la più breve sequenza di modifiche. Perciò ciò che una persona vede come «questo capoverso è sceso», la macchina lo esprime come una cancellazione accoppiata a un'aggiunta. Non esiste alcuna notazione per lo spostamento in quanto tale. L'altro punto è che il confronto procede per righe, sicché una riga che differisce di un solo carattere viene riferita come mutata per intero. Il caso più sconcertante è qui una differenza negli spazi o nelle tabulazioni finali, che segna come mutata la riga benché nulla appaia diverso. Quando un confronto esce inverosimilmente ampio, è la prima cosa da sospettare. Le differenze nei fine riga (CRLF su Windows, LF sui sistemi di tipo Unix) sono invece trattate da questo strumento come lo stesso a capo e non compaiono come differenze.

Come si usa

  1. Incollate l'originale in A Mettete il contenuto com'era prima della modifica.
  2. Incollate la revisione in B Mettete il contenuto com'è rimasto dopo la modifica.
  3. Leggete le differenze colorate Le righe aggiunte e quelle tolte compaiono in colori distinti.
  4. Sospettate dei fine riga se la differenza è enorme Una differenza nei soli spazi o tabulazioni finali segna come mutata quella riga. I fine riga (CRLF e LF) vengono uniformati automaticamente prima del confronto.

Consigli per sfruttarlo al meglio

  • Basta incollare un file di configurazione prima e dopo una modifica — un file di ambiente, YAML, JSON — per vedere a colpo d'occhio quali righe siano state aggiunte o eliminate.
  • Anche in un ambiente privo di un sistema di controllo di versione, con un semplice copia e incolla si possono fare una revisione sommaria del codice o una rilettura di uno scritto.
  • Il riordinamento di una riga è rilevato come eliminazione più aggiunta: attenzione, perché anche una riga identica spostata altrove risulta come differenza.
  • Il confronto è rigoroso fino al singolo carattere e comprende spazi, ritorni a capo e distinzione fra maiuscole e minuscole: anche una riga in cui sia cambiato soltanto il rientro risulta modificata.
  • Confrontando testi lunghi, conviene riunire ciascun capoverso su una riga prima di incollare: le differenze risulteranno più leggibili per capoverso.

Quando torna utile

Nel verificare una modifica a un file di configurazione

Prima che passi in produzione potete vedere che è cambiato soltanto ciò che intendevate cambiare.

Nel riscontrare l'esito di una revisione

Accostare una bozza alla sua riscrittura lascia seguire a colpo d'occhio dove sia passata la mano.

Nel rivedere senza Git

File mai posti sotto controllo di versione si confrontano ugualmente, bastando incollarli.

Nell'accertare che un'uscita sia riproducibile

Confrontate gli esiti di due esecuzioni dello stesso processo e accertate che nulla diverga.

Termini del confronto

Riga aggiunta
Una riga presente solo in B.
Riga tolta
Una riga presente solo in A. Anche una riga che si sia soltanto spostata affiora come una cancellazione accoppiata a un'aggiunta.
Confronto per righe
Un confronto che tratta ciascuna riga come un'unità. Una differenza di un carattere segna l'intera riga come mutata.
Fine riga
Il carattere che segna il termine di una riga: CRLF su Windows, LF sui sistemi di tipo Unix. Questo strumento tratta CRLF, LF e CR come lo stesso a capo, quindi una differenza nei soli fine riga non compare nel risultato.
Blocco
Un unico tratto entro un confronto in cui le modifiche si raccolgono.
Contesto
Le righe immutate mostrate sopra e sotto una riga modificata, incluse per collocarne meglio la posizione.

Domande frequenti

In tutte quelle in cui occorre cogliere le modifiche riga per riga: confrontare un file di configurazione o un documento prima e dopo un cambiamento, condurre una revisione del codice in un ambiente privo di controllo di versione, individuare le parti modificate di un contratto o di un regolamento.

Quello confronta dati tabellari abbinando le righe per colonna chiave e rilevando le modifiche cella per cella, mentre questo confronta riga per riga testi di forma libera, privi di struttura in colonne. Si presta quindi al confronto di dati non tabellari, come file di configurazione e testi discorsivi.

Quello analizza la struttura del JSON, cioè la gerarchia di oggetti e vettori, e rileva le differenze per chiave, mentre questo non analizza alcuna struttura e confronta semplicemente le righe come stringhe: è uno strumento generale, applicabile a qualunque testo.

Il riordinamento non è rilevato come spostamento, ma come combinazione di un'eliminazione dalla posizione originaria e di un'aggiunta in quella nuova. È il comportamento comune agli algoritmi di confronto riga per riga, compreso quello dei sistemi di controllo di versione.

No. Il calcolo delle differenze avviene interamente nel JavaScript del navigatore e quanto inserite non è mai trasmesso ad alcun servente: potete usare lo strumento con serenità anche su testi riservati.
Tool-kun

A proposito — come si ricavano le differenze con la sottosuccessione comune più lunga

Fra gli algoritmi per rilevare le differenze fra due testi è largamente noto il metodo pubblicato nel 1986 dall'informatico Eugene Myers, dell'Università dell'Arizona, nell'articolo «An O(ND) Difference Algorithm and Its Variations» (Algorithmica). I comandi di confronto dei principali sistemi di controllo di versione adottano algoritmi di quella famiglia e rilevano con efficienza le aggiunte e le eliminazioni riga per riga. Anche questo strumento segue quell'impostazione e riduce al minimo le modifiche mostrate cercando la sottosuccessione comune più lunga.

La sottosuccessione comune più lunga è, fra le sottosuccessioni presenti in entrambe le successioni — qui le sequenze di righe — quella di maggiore lunghezza. Le differenze si ottengono considerando eliminate o aggiunte le righe che non vi appartengono: più essa è lunga, meno modifiche compaiono a schermo. Grazie alla tecnica della programmazione dinamica, il calcolo resta praticabile in tempi ragionevoli anche con testi di molte righe.

Gli algoritmi di confronto hanno però un punto debole. Quando una riga si limita a spostarsi altrove, molte realizzazioni non la riconoscono come spostamento e la presentano come combinazione di eliminazione e aggiunta. È per questo che, confrontando testi in cui l'ordine delle righe è molto cambiato, le differenze possono apparire assai più numerose delle modifiche reali: saperlo aiuta a leggere correttamente i risultati.