Hogyan működnek a diff algoritmusok
Minden diff nézet ezen az oldalon a Myers algoritmussal készül — egy 1986-os technika Eugene W. Myers-től, ami a legrövidebb szerkesztési szkriptet találja meg két token sorozat között O((N+M)D) időben, ahol D a szerkesztési távolság.
- Bemenetek tokenizálása — Az összehasonlítás előtt az algoritmus minden bemenetet tokenek sorozatára bont. A sor részletesség újsorok mentén bont; a szó részletesség szóközök és írásjelek mentén bont; a karakter részletesség minden Unicode kódpontot saját tokenként kezel.
- Szerkesztési gráf felépítése — A Myers algoritmus az összehasonlítást egy 2D rácsban vezetett útként modellezi, ahol a jobbra mozgás „törlés az eredetiből”, a lefele mozgás „beszúrás a módosítottból”, és az átlós mozgás „token egyezik mindkettőben”. Az algoritmus megtalálja a legrövidebb, átlókban gazdag utat.
- LCS kinyerése — Az átlós mozgások a legrövidebb útban a leghosszabb közös részsorozatot jelölik — a tokeneket, amelyek mindkét bemenetben ugyanabban a relatív sorrendben jelennek meg. Minden token az LCS-ben „változatlan”; minden más vagy hozzáadás vagy törlés.
- Előfeldolgozási opciók alkalmazása — Ha bekapcsolod a „Kis- és nagybetű figyelmen kívül hagyása” opciót, mindkét bemenet kisbetűssé válik az LCS futtatása előtt. A „Szóközök figyelmen kívül hagyása” összevonja a többszörös szóközöket eggyé. A „Sorok széli szóközeinek eltávolítása” levágja a vezető és záró szóközöket soronként az összehasonlítás előtt.
- Kiválasztott nézet renderelése — A kimenet ugyanaz az LCS eredmény háromféleképpen megjelenítve: Egymás mellett mutatja az eredetit a bal oldalon és a módosítottat a jobb oldalon egy kétoszlopos rácsban piros és zöld sor kiemelésekkel. Egységesített egyetlen oszlopot mutat − és + előtagú sorokkal. Beágyazott a törléseket piros áthúzásként és a hozzáadásokat zöld aláhúzásként mutatja ugyanabban a szövegfolyamban.
- Összegző sáv kiszámítása — A renderelés után az eszköz megszámolja, hány token került hozzáadásra, eltávolításra és maradt változatlan, majd kiszámítja a hasonlóságot a változatlan tokenek és a két bemeneti hossz közül a nagyobb arányaként. A 100%-os hasonlóság azt jelenti, hogy a bemenetek azonosak az előfeldolgozás után.
Miért használj diff ellenőrzőt
- Kód áttekintés Git kliens nélkül — Illessz be két verziót egy konfigurációs fájlból, SQL migrációból vagy shell szkriptből, és lásd, mi változott anélkül, hogy repo-t klónoznál, ágat váltanál vagy CI pipeline-ra várnál.
- Szerződés és dokumentum piros vonalak — A szó szintű diff megmutatja, mely kifejezések változtak a szerződéstervezetek között gyorsabban, mint a Word Változások Követése panelje.
- Esszé és vázlat átdolgozások — Az írók összehasonlíthatják az első vázlatot a szerkesztett verzióval szó részletességgel, hogy lássák a cseréket, beszúrásokat és kivágásokat anélkül, hogy újra kellene olvasniuk mindkét másolatot.
- Napló és konfiguráció összehasonlítás — A rendszergazdák összehasonlíthatnak két szerver konfigurációs pillanatképet, két cron ütemezést vagy két
ps auxkimenetet sor részletességgel.
Gyakori felhasználások
A szöveg diff minden szerkesztési ciklus végén felbukkan az írásban, fejlesztésben és üzemeltetésben.
- Pull request áttekintés: illessz be két függvény implementációt egymás mellé a logikai változás megértéséhez a jóváhagyás előtt.
- Nemzetköziesítés minőségbiztosítás: hasonlíts össze egy angol forrás karakterláncot a lefordított megfelelőjével szó szinten a beszúrások, kihagyások észleléséhez.
- Incidens elemzés: diff-et futtass két Kubernetes manifest pillanatképen sor szinten a kiesést megelőző konfigurációs változás elkülönítéséhez.
Egy gyakorlati példa
Vegyünk egy ötsoros szerver konfigurációt. Eredeti: host=localhost, port=5432, dbname=app_db, user=app, password=secret. Módosított: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. Sor részletességgel és Egymás mellett nézettel az 1. sor piros a bal oldalon és zöld a jobb oldalon, a 4. sor piros és zöld, a 2., 3. és 5. sor változatlan marad mindkét oldalon.
Ez a böngészőmben fut?
Igen. A teljes diff számítás kliens oldalon fut a nyílt forráskódú jsdiff könyvtár segítségével, ami az oldallal együtt töltődik be. Semmi, amit gépelsz, illesz be vagy összehasonlítasz, nem kerül szerverre küldésre.
Mit jelent a hasonlósági százalék?
A hasonlóság a következőképpen kerül kiszámításra: változatlan tokenek / max(összes token az eredetiben, összes token a módosítottban). A 100%-os pontszám azt jelenti, hogy a két bemenet azonos az előfeldolgozási opciók alkalmazása után.
Lehet JSON / YAML / XML szemantikus diff-et futtatni?
Ebben az eszközben nem. Ez egy szöveg szintű diff, így a JSON vagy XML szóköz-only újraformázása is sok változást mutat, még ha az adatok logikailag azonosak is.
Miben különbözik az egységesített az egymás melletti nézettől?
Az Egymás mellett két oszlopot jelenít meg: az eredetit a bal oldalon és a módosított verziót a jobb oldalon, az eltávolított sorok pirosan a bal oldalon és a hozzáadott sorok zölden a jobb oldalon. Az Egységesített egyetlen oszlopot jelenít meg − előtaggal a piros háttérrel ellátott eltávolított sorokhoz és + előtaggal a zöld háttérrel ellátott hozzáadott sorokhoz.
Illeszd be az eredetit a bal oldalon, a módosított verziót a jobb oldalon, válassz egy nézetet és egy részletességet, és az összehasonlítás ezredmásodpercek alatt megjelenik. Kapcsold be az Élő módot, és a diff újrafut minden billentyűleütésre. Töltsd le az eredményt szabványos egységesített .patch fájlként. Nincs feltöltés, nincs fiók, nincs kvóta.