Confronta due testi — Diff
Confronta due testi all'istante nel browser. Vista affiancata, evidenziazione parola per parola, esportazione diff unificato, opzioni per ignorare maiuscole/spazi/righe vuote. 100 % browser — nessun upload.
Opzioni da ignorare
Cos'è il diff di testo?
Il diff di testo è un confronto strutturato fra due documenti testuali che trova il più piccolo insieme di inserimenti e rimozioni capaci di trasformare uno nell'altro. L'output rende visibile il cambiamento: verde per le righe aggiunte, rosso per quelle rimosse, in vista affiancata o nel formato patch unificato (il formato `---/+++/@@` usato da `git`, GitHub e dal comando Unix `patch`).
Sotto il cofano, ogni diff moderno è un algoritmo di sottosequenza comune più lunga (LCS). L'articolo di Eugene Myers del 1986 in O((N+M)D) è l'implementazione canonica efficiente; la programmazione dinamica classica (usata qui, con potatura del prefisso/suffisso comune) è più semplice e funziona benissimo per gli input web tipici. Una volta allineate le righe, le coppie vicine di rimozione + aggiunta passano per un secondo LCS a livello di token, in modo che il renderer evidenzi solo le parole effettivamente cambiate dentro una riga — quello che i revisori chiamano diff intra-riga o parola per parola.
Perché non confrontare le stringhe carattere per carattere? Perché le modifiche raramente sono piatte: inserire una riga a metà di un file da 200 righe sposta tutte quelle sotto. Un `===` ingenuo dichiarerebbe diverse tutte le 199 righe. Il LCS dice la verità: una riga aggiunta, 199 invariate.
Questo strumento esegue tutto il confronto nel tuo browser. Nessun upload, nessun file temporaneo, nessun log. Sicuro per codice proprietario, contratti annotati, log privati e tutto ciò che non vorresti incollare in un server di terze parti. Devi confrontare JSON? Usa il JSON Diff strutturale così l'ordine delle chiavi e gli spazi smettono di essere rumore. Confronto di due config in YAML o CSV? Converti prima con YAML a JSON o JSON a CSV, poi confronta con lo strumento giusto per il formato.
// Two strings that look 'mostly the same' but a naïve check disagrees const a = 'hello world'; const b = 'hello, world!'; // Character equality a === b; // false — but only 3 characters actually changed. // LCS-style diff (this tool, at line + word granularity) // → 1 line modified, inline highlight: 'hello[, ]world[!]' // → unified patch: // --- original // +++ modified // @@ -1 +1 @@ // -hello world // +hello, world!
Funzionalità chiave
Affiancato + Unificato
Passa fra la vista visiva a due colonne (per la review umana) e il formato canonico di patch unificato (per `git apply`, strumenti di code review, bug report).
Evidenziazione inline parola per parola
Quando due righe sono appaiate come modificate, solo i token cambiati portano lo sfondo colorato. L'occhio trova la modifica subito invece di scorrere 80 caratteri.
Ignora maiuscole / spazi / righe vuote
Quattro interruttori indipendenti: maiuscole, tutti gli spazi, solo spazi finali, righe vuote. Replica `git diff -i -w -b` in due clic.
Esportazione in diff unificato
Copia un patch `---/+++/@@` pulito con tre righe di contesto. Si incolla diretto in un commento di PR, in un bug report o in `patch -p1`.
100 % nel browser
Gli input non lasciano il dispositivo. Nessun upload, nessuna analitica sul testo. Funziona offline una volta caricata la pagina. Sicuro per codice proprietario e prosa riservata.
Unicode + RTL
Tokenizza sui confini di parola Unicode. Arabo, ebraico e CJK si confrontano puliti; le varianti di fine riga (CRLF, LF, CR) sono tutte normalizzate.
Esempi
Code review — rinominata una variabile
function getUser(id) {
const u = db.users.find(x => x.id === id);
return u;
} function getUser(userId) {
const u = db.users.find(x => x.id === userId);
return u;
} La vista affiancata evidenzia ogni riga toccata dalla rinomina, mentre il diff parola per parola attenua i token invariati così il revisore vede esattamente quale identificatore è cambiato.
Modifica contratto — clausola aggiunta
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 3. Disputes are resolved in California courts.
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 2a. Termination notice must be in writing. 3. Disputes are resolved in California courts.
Una sola clausola inserita (riga 2a) è l'unica differenza. Le righe di contesto attorno restano pulite — utile per le revisioni con segno rosso di contratti o policy.
Indagine sui log — tempi di richiesta variati
GET /api/users 200 14ms POST /api/orders 201 88ms GET /api/orders/42 200 21ms
GET /api/users 200 14ms POST /api/orders 201 4200ms GET /api/orders/42 500 21ms
Cambiano due righe. L'evidenziazione inline mostra la deriva di latenza 88ms → 4200ms e lo status code 200 → 500. Una timeline d'incident già pronta.
Spazi a fine riga — opzione « Ignora spazi finali »
margin: 0; padding: 0; border: none;
margin: 0; padding: 0; border: none;
Senza l'opzione, la riga 1 segnala una differenza (spazi finali). Attiva « Ignora spazi / tab finali » e il diff va a zero — lo stesso trucco di `git diff -b`.
Come si usa
- 1
Incolla entrambe le versioni
Testo originale a sinistra, modificato a destra. Il diff live si renderizza mentre digiti; gli input grandi (>200 KB combinati) passano a un bottone Diff manuale.
- 2
Attiva le opzioni da ignorare che ti servono
Ignora maiuscole, ignora tutti gli spazi, ignora spazi finali o ignora righe vuote — ognuna indipendente e mantenuta tra le visite.
- 3
Leggi il diff o prendi il patch
Affiancato per la review umana, Unificato per il formato patch `---/+++/@@`. « Copia diff unificato » manda un patch pulito negli appunti per code review o `patch -p1`.
Trappole comuni del diff
Tutto il file 'modificato' dopo una copia Windows ↔ Unix
Se incolli da Notepad su Windows in un originale editato su Unix, ogni riga mostrerà differenze a causa di \r. Attiva « Ignora spazi / tab finali » per silenziare i caratteri CR.
Diff: 200 modifications (all because of trailing \r)
Ignore trailing spaces / tabs → 2 real changes
Diff di indentazione che urla
Riformattare tab ↔ spazi fa esplodere i diff riga per riga. « Ignora tutti gli spazi » comprime il diff sulle vere modifiche semantiche.
Diff: 87 modifications (all are indent changes)
Ignore all whitespace → 4 actual changes
Paragrafi identici segnalati per via di una riga vuota
Aggiungere o togliere una sola riga vuota in prosa può disallineare un'intera area. « Ignora righe vuote » lo risolve senza toccare i contenuti.
Diff: paragraph 2 'completely changed' (one blank line moved)
Ignore blank lines → no changes in paragraph 2
Il diff dice « identici » ma i file sono diversi
Quasi sempre è un'opzione « Ignora » di maiuscole o spazi rimasta attiva da una sessione precedente. Apri il pannello « Opzioni da ignorare » — ogni interruttore è lì. Disattivali tutti se vuoi un confronto byte-strict.
0 differences shown, but `cmp` says the files differ
Disable all Ignore options → real diff appears
JSON incollato sembra 'tutto cambiato'
Il diff di testo tratta l'ordine delle chiavi come significativo; JSON no. Per payload JSON usa lo strumento dedicato JSON Diff — ignora l'ordine delle chiavi e rispetta la strettezza dei tipi.
Text diff on JSON: 100% of lines changed (just a key reorder)
<a href="/it/tools/json-diff">JSON Diff</a>: 0 differences
Avviso di diff troncato ignorato
Oltre le 5.000 righe per lato l'input viene tagliato. Se compare l'avviso, passa alla riga di comando `diff -u file1 file2` o `git diff --no-index` — entrambi fanno streaming e gestiscono gigabyte.
Pasted a 20,000-line log — only first 5,000 lines diffed
`diff -u a.log b.log` in terminal handles full file
Casi d'uso comuni
- Snippet di code review
- Butta due versioni di una funzione nei riquadri per vedere d'un colpo una rinomina, un ramo rimosso o una nuova guard clause. L'evidenziazione parola per parola è più veloce di uno scorrimento del diff GitHub per una modifica di una riga.
- Redline contratto / policy
- Incolla il contratto di ieri contro la revisione di oggi. Le clausole inserite saltano fuori; i paragrafi invariati collassano in grigio. Esporta il patch unificato per la pista di revisione legale.
- Indagine timeline log
- Confronta la fetta di log pre-incident di un SRE con quella durante l'incident. Latenza, status code e deriva di frequenza emergono subito senza `awk`.
- Revisione prosa / bozza
- Incolla una bozza e la versione del tuo editor. Il diff parola per parola mostra esattamente quali frasi sono state riscritte — preziosissimo per accettare o rifiutare i cambiamenti uno per uno.
- Review di traduzioni
- Confronta una vecchia traduzione con una ri-traduzione per verificare che la nuova copia preservi senso, struttura e placeholder. Attiva « Ignora spazi finali » per silenziare il rumore che i traduttori introducono spesso.
- Audit di .env / file di config
- Confronta due `.env`, `docker-compose.yaml` o file rc di shell. Con « Ignora righe vuote » attiva, il diff si concentra sulle differenze funzionali invece che sul rumore di formattazione.
Dettagli tecnici
- LCS con potatura prefisso/suffisso
- Le righe comuni in testa e in coda vengono rimosse prima di eseguire l'LCS per programmazione dinamica. Un diff fra 'due config da 2.000 righe con una sola riga cambiata' collassa in una tabella DP 1×1 e si renderizza in meno di un millisecondo.
- Diff intra-riga a livello di token
- Le hunk adiacenti di rimozione + aggiunta vengono appaiate e tokenizzate tramite sequenze Unicode di parola/non-parola/spazio. Un secondo passaggio di LCS produce le porzioni verdi/rosse che rendono leggibili le righe modificate.
- Diff unificato compatibile git/patch
- L'output segue il formato `---/+++/@@ -L,C +L,C @@` definito per GNU patch e usato da Git, GitHub e ogni strumento di code review. Si applica con `pbpaste | patch -p0`.
- Tetto di input 5.000 righe per lato
- Oltre il tetto il diff tronca e avvisa. Per input da diversi MB usa `diff -u` da riga di comando o `git diff --no-index` — fanno streaming e gestiscono gigabyte.
Buone pratiche
- Scegli le opzioni da ignorare prima di leggere
- Rumore da spazi finali, CRLF e maiuscole affoga il segnale. Attiva subito le opzioni giuste; il diff diventa molto più leggibile e smetti di allenarti a saltare modifiche 'finte'.
- Unificato per condividere, Affiancato per revisionare
- Le colonne visive sono per i tuoi occhi. I patch unificati sono per i terminali altrui. Un diff unificato copiato si infila in un messaggio Slack, in un commento Jira o in `patch -p1` senza traduzioni.
- Verifica con il % di somiglianza
- Se due file sono 'quasi uguali' ma la somiglianza marca 30 %, hai un problema di fine riga o di spazi. Attiva « Ignora tutti gli spazi » e ricontrolla prima di leggere il diff.
Domande frequenti
Il testo che incollo viene inviato al vostro server?
Qual è la differenza tra diff di testo e diff JSON?
Come ignoro spazi, maiuscole o righe vuote?
Cos'è un diff unificato (e quando lo si copia)?
Perché il diff mostra righe intere modificate se ho cambiato una sola parola?
Come vengono gestiti i fine riga CRLF e LF?
Quanto possono essere grandi i due input?
E per il diff di codice? Riconosce il mio linguaggio?
Perché una singola modifica appare a volte come una riga rimossa più una riga aggiunta?
Come si calcola la percentuale di somiglianza?
Posso condividere un diff con un collega?
Il diff gestisce lingue da destra a sinistra come arabo o ebraico?
Strumenti correlati
Vedi tutti gli strumenti →Tester Regex gratuito — Debug e match dei pattern online
Elaborazione del testo
Testa pattern regex all'istante su qualsiasi testo. Evidenziazione delle corrispondenze, gruppi di acquisizione, anteprima di sostituzione e split. Espressioni regolari in JavaScript, 100% private, senza registrazione.
Contatore di parole e caratteri gratuito
Elaborazione del testo
Conta parole, caratteri, frasi, paragrafi e tempo di lettura all'istante. Contatore di parole in tempo reale con controlli di limite per Twitter, meta description e Instagram. Gratuito, privato, senza registrazione.
Convertitore di Basi Numeriche — Bin, Hex, Ott, Dec
Strumenti di conversione
Converti istantaneamente tra binario, esadecimale, decimale, ottale e qualsiasi base (2-36). Strumento online gratuito e privato: tutta l'elaborazione avviene nel tuo browser.
Decodificatore e codificatore Base64
Codifica e formattazione
Decodifica e codifica Base64 online gratis. Conversione in tempo reale con pieno supporto UTF-8 ed emoji. 100% privato — gira nel tuo browser. Nessuna registrazione.
Generatore Crontab e Costruttore di Espressioni Cron
Data e ora
Genera, valida e decodifica espressioni cron online nel browser. Anteprima live delle prossime esecuzioni in ora locale o UTC. Sintassi POSIX a 5 campi, preset e descrizione in italiano.
Convertitore CSV in JSON
Codifica e formattazione
Converti CSV in JSON nel browser. RFC 4180, inferenza tipi, riga header, sicuro per big-int. 100% privato, nessun upload.