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
- Incollate l'originale in A Mettete il contenuto com'era prima della modifica.
- Incollate la revisione in B Mettete il contenuto com'è rimasto dopo la modifica.
- Leggete le differenze colorate Le righe aggiunte e quelle tolte compaiono in colori distinti.
- 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
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.