§

Options

Nézet
Részletesség
Preprocessing
§

Input

Az amerikai mérnöki csapatok naponta tucatszor találkoznak diff felülettel: Git pull-request áttekintések GitHub-on és GitLab-on, szerződés piros vonal nyomon követése Microsoft Word-ben, szakértői áttekintési munkafolyamatok a Google Docs-ban. A NIST SP 800-171 szerint dolgozó szövetségi vállalkozóknak gyakran kell konfigurációs fájlokat és hozzáférés-vezérlési listákat különböztetniük a CUI környezetekbe történő commit előtt, és ezeket a részleteket egy nyilvános SaaS összehasonlító szolgáltatásba illeszteni általában szabályzatsértés. Az összehasonlítás futtatása a böngésző lapon belül — nincs feltöltés, nincs fiók, nincs harmadik féltől származó napló — gyorsan tartja a munkafolyamatot a mérnökök számára.

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Ö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 aux kimenetet 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.