§

Options

Vizualizare
Granularitate
Preprocessing
§

Input

Echipele de inginerie din SUA lovesc o suprafață de dif de zeci de ori pe zi: revizuirile pull-request pe GitHub și GitLab, urmărirea modificărilor în contracte în Microsoft Word, fluxurile de revizuire colegială în Google Docs. Antreprenorii federali care lucrează sub NIST SP 800-171 au nevoie adesea să compare fișiere de configurare și liste de control al accesului înainte de a comite modificări în medii CUI, iar lipirea acestor fragmente într-un serviciu public de comparație SaaS este de obicei o încălcare a politicii. Rularea comparației într-o filă de browser — fără încărcare, fără cont, fără jurnal terță parte — menține fluxul de lucru rapid pentru ingineri și acceptabil pentru cei care scriu politicile de manipulare a datelor.

Cum funcționează algoritmii de dif

Fiecare vizualizare dif de pe această pagină este produsă de algoritmul Myers — o tehnică din 1986 de Eugene W. Myers care găsește cel mai scurt script de editare între două secvențe de tokenuri în timp O((N+M)D), unde D este distanța de editare. Algoritmul este construit în jurul problemei celei mai lungi subsecvențe comune, iar motorul rulează exclusiv în browser folosind biblioteca open-source jsdiff.

  1. Tokenizează intrările — Înainte de a compara, algoritmul împarte fiecare intrare într-o secvență de tokenuri. Granularitatea pe linii împarte pe linii noi; granularitatea pe cuvinte împarte pe granițe de spațiu alb și punctuație; granularitatea pe caractere tratează fiecare punct de cod Unicode ca propriul token.
  2. Construiește graful de editare — Algoritmul Myers modelează comparația ca un drum printr-o grilă 2D unde deplasarea la dreapta înseamnă „șterge din original”, deplasarea în jos înseamnă „inserează din modificat”, iar deplasarea pe diagonală înseamnă „tokenul se potrivește în ambele”. Algoritmul găsește cel mai scurt drum cu multe diagonale.
  3. Extrage LCS — Mișcările diagonale din cel mai scurt drum trasează cea mai lungă subsecvență comună — tokenurile care apar în ambele intrări în aceeași ordine relativă. Fiecare token din LCS este „neschimbat”; orice altceva este fie o adăugire, fie o ștergere.
  4. Aplică opțiunile de preprocesare — Dacă activezi „Ignoră case”, ambele intrări sunt transformate în minuscule înainte de pasul LCS, astfel încât „HELLO” și „hello” să conteze ca identice. „Ignoră spațiul alb” colapsează mai multe spații într-unul singur. „Taie fiecare linie” elimină spațiul alb de la începutul și sfârșitul fiecărei linii înainte de comparație.
  5. Redă vizualizarea selectată — Rezultatul este același rezultat LCS afișat în trei moduri: Una lângă alta arată originalul în stânga și modificatul în dreapta într-o grilă pe două coloane cu evidențieri roșii și verzi. Unificată arată o singură coloană cu linii prefixate cu − și +, ca rezultatul lui git diff. Inline arată ștergerile ca tăiere roșie și adăugirile ca subliniere verde în același flux de text.
  6. Calculează banda de sumar — După redare, instrumentul numără câte tokenuri au fost adăugate, eliminate și neschimbate, apoi calculează similaritatea ca raport dintre tokenurile neschimbate și cea mai mare dintre cele două lungimi de intrare. O similaritate de 100% înseamnă că intrările sunt identice după preprocesare.

De ce să folosești un verificator dif

  • Revizuire de cod fără un client Git — Lipește două versiuni ale unui fișier de configurare, ale unei migrări SQL sau ale unui script shell și vezi ce s-a schimbat fără a clona un depozit, a comuta ramuri sau a aștepta o conductă CI. Instrumentul este util pentru revizuiri rapide în timpul programării în perechi, pentru predări între contractori unde cealaltă parte nu și-a împărtășit istoricul Git și pentru baze de cod moștenite care precedă complet controlul versiunilor. Vizualizarea unificată produce un rezultat pe care îl poți copia direct într-un fir de chat sau un tichet.
  • Modificări în contracte și documente — Dif-ul la nivel de cuvânt arată care termeni s-au schimbat între versiunile de contract mai repede decât panoul Urmărire Modificări din Word. Lipește clauza A din prima versiune și clauza B din copia executată, iar substituția se evidențiază roșu-pe-verde exact la fraza care s-a mutat. Parajuriștii și echipele de achiziții folosesc acest lucru pentru a verifica că modificările de ultim moment nu au trecut neobservate înainte ca un contract să fie semnat.
  • Revizuire eseuri și schițe — Scriitorii care compară o primă schiță cu o versiune editată pot comuta la granularitate de cuvânt pentru a vedea fiecare substituție, inserție și tăietură fără a reciti ambele copii. Același flux de lucru funcționează pentru traducători care auditează modificările în raport cu textul sursă, pentru editori care verifică că o editare a păstrat vocea autorului și pentru echipele de jurnalism care reconciliază un articol publicat cu schița depusă.
  • Comparare jurnale și configurații — Administratorii de sistem care compară două instantanee de configurare server, două programări cron sau două ieșiri ps aux pot folosi granularitatea pe linii pentru a localiza singurul parametru modificat într-un fișier de 200 de linii în câteva secunde. Asociază-l cu opțiunea Ignoră spațiul alb și un dif zgomotos doar de aliniere se reduce la modificările de parametri care contează efectiv.

Aplicații comune

Dif-ul text apare la sfârșitul fiecărui ciclu de editare în scriere, dezvoltare și operațiuni.

  • Revizuire pull-request: lipește două implementări de funcții una lângă alta pentru a înțelege schimbarea logică înainte de a aproba, fără a fi nevoie să verifici ramura.
  • Asigurare calitate internaționalizare: compară un șir sursă în engleză cu echivalentul său tradus la nivel de cuvânt pentru a detecta inserții, omisiuni sau schimbări de terminologie pe care traducătorul le-ar fi putut introduce.
  • Analiză incident: compară două instantanee de manifest Kubernetes sau două ieșiri „docker inspect” la nivel de linie pentru a izola modificarea de configurare care a precedat o întrerupere.

Un exemplu practic

Ia o configurare de server de cinci linii. Original: host=localhost, port=5432, dbname=app_db, user=app, password=secret. Modificat: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. Cu granularitate pe linii și vizualizare Una lângă alta, linia 1 arată roșu în stânga (host=localhost) și verde în dreapta (host=db.prod.example.com), linia 4 arată roșu (user=app) și verde (user=app_prod), iar liniile 2, 3 și 5 rămân neschimbate pe ambele părți. Banda de sumar raportează 2 adăugiri, 2 ștergeri, 3 neschimbate și o similaritate de 60% — trei din cinci linii păstrate. Comută la granularitate pe cuvinte și dif-ul se strânge și mai mult: doar valorile din dreapta lui = de pe liniile 1 și 4 se evidențiază, cheile rămân neschimbate, iar similaritatea crește la aproximativ 85%, deoarece LCS numără acum host, user și punctuația din jur ca păstrate.

Rulează acesta în browserul meu?

Da. Întregul calcul de dif rulează pe partea clientului folosind biblioteca open-source jsdiff încărcată cu pagina. Nimic din ceea ce tastezi, lipești sau compari nu este trimis către niciun server. Poți verifica singur: deschide DevTools în browser, comută la fila Rețea, golește jurnalul, click pe Compară și confirmă că zero solicitări de rețea se declanșează pentru pasul de comparație.

Ce înseamnă procentul de similaritate?

Similaritatea este calculată ca tokenuri neschimbate / max(total tokenuri în original, total tokenuri în modificat). Un scor de 100% înseamnă că cele două intrări sunt identice după aplicarea opțiunilor tale de preprocesare (foldare case, colapsare spațiu alb, tăiere linii). Un scor de 0% înseamnă că niciun token nu este partajat între intrări. Metrica este o aproximare grosieră a distanței de editare — utilă ca un indicator rapid — nu un scor de plagiat sau originalitate.

Pot compara JSON / YAML / XML semantic?

Nu în acest instrument. Acesta este un dif la nivel de text, deci reformatarea doar a spațiului alb a JSON sau XML arată în continuare multe modificări chiar și atunci când datele sunt identice logic. Reordonarea cheilor obiectelor în JSON apare și ca modificări, chiar dacă majoritatea analizatoarelor tratează ordinea cheilor ca nesemnificativă. Pentru un dif semantic adevărat care compară arbori de obiecte analizate și ignoră ordinea cheilor și formatarea, planificăm un instrument dedicat JSON Diff. Pentru moment, normalizează ambele intrări la aceeași indentare și ordine a cheilor înainte de a le lipi aici.

Cum diferă vizualizările unificată și una lângă alta?

Una lângă alta afișează două coloane: originalul în stânga și versiunea modificată în dreapta, cu liniile eliminate evidențiate roșu în stânga și liniile adăugate evidențiate verde în dreapta. Liniile neschimbate apar în ambele coloane aliniate la același rând. Unificată afișează o singură coloană cu un prefix și fundal roșu pentru liniile eliminate și un prefix + și fundal verde pentru liniile adăugate — același aspect pe care git diff îl tipărește în terminal. Folosește unificată când dorești să copiezi rezultatul ca fișier patch sau să îl lipești într-un fir de revizuire de cod. Folosește una lângă alta când alinierea vizuală a ceea ce a înlocuit ce este mai importantă decât textul brut al patch-ului.

Lipește originalul în stânga, versiunea modificată în dreapta, alege o vizualizare și o granularitate, iar comparația apare în milisecunde. Activează modul live și dif-ul re-rulează la fiecare tastare pe măsură ce editezi oricare parte. Descarcă rezultatul ca fișier .patch unificat standard pe care git apply îl consumă direct. Fără încărcare, fără cont, fără cheie API vendor, fără cotă.