Článek
Porovnávejte úryvky kódu bez jejich nahrávání
Pokaždé, když vložíte dva soubory do online diff nástroje, tento kód opustí váš počítač. Konfigurační soubory, databázové dotazy, API klíče pohřbené v úryvku .env: vše putuje na server, který nekontrolujete. Tento článek popisuje, jak diffovací algoritmy fungují, co v praxi znamenají možnosti granularity a proč je důležité udržet porovnání lokální.
Co diff počítá
Diff nástroj vezme dva texty a najde minimální sadu změn, která jeden přemění na druhý. Klíčová myšlenka je nejdelší společná podposloupnost neboli LCS: nejdelší posloupnost řádků (nebo tokenů), která se vyskytuje v obou textech ve stejném pořadí, i když nejsou sousední. Vše, co není v této společné podposloupnosti, je buď přidání v nové verzi, nebo odstranění ze staré. Klasický algoritmus pro to je od Myerse (1986), který nalezne nejkratší editační skript v čase O((N+M)D), kde N a M jsou délky obou textů a D je počet editací. V praxi většina nástrojů přidává krok předzpracování, který ignoruje shodné úvodní a závěrečné řádky, čímž redukuje problém na změněnou oblast. Výsledkem je patch: posloupnost bloků, z nichž každý popisuje souvislý blok kontextových řádků, odstraněných a přidaných řádků. To je formát používaný unixovým diff, Gitem a většinou nástrojů pro revizi kódu.

Granularita na úrovni řádků, slov a znaků
Granularita diffu určuje, co se počítá jako jednotka porovnání. Diff na základě řádků je výchozím nastavením ve většině nástrojů: každý řádek je považován za jeden token. Je rychlý a produkuje výstup snadno čitelný v kontextu, ale označí celý řádek jako změněný, i když se lišilo jen jedno slovo na tomto řádku. Diff na úrovni slov rozdělí každý řádek na slova před spuštěním LCS. To poskytuje podrobnější přehled o tom, co se na řádku změnilo, což je užitečné pro prózu, konfigurační hodnoty nebo JSON. Diff na úrovni znaků jde ještě dále a může zvýraznit jediné změněné písmeno uvnitř dlouhého identifikátoru. Zpracování bílých znaků přidává šum. Řádek končící CRLF a stejný řádek končící LF se zobrazí jako odlišné při striktním porovnání bajtů. Většina nástrojů nabízí přepínač pro normalizaci konců řádků před porovnáváním. Podobně mohou koncové mezery, odsazení tabulátorem oproti mezeře a prázdné řádky produkovat nadbytečný diff výstup. Zapnutí normalizace bílých znaků je obvykle správným výchozím nastavením při porovnávání kódu z různých editorů nebo operačních systémů.
Bezpečnostní riziko online diff nástrojů
Online diff a pastebin služby jsou praktické: otevřete URL, vložíte dva úryvky, získáte barevný výstup. Problém je, že vložený text je přenesen na server třetí strany. V závislosti na službě může být tento text zaznamenán, indexován, uložen na neurčito nebo sdílen s poskytovateli analytiky. Nejvíce na tom záleží, když kód obsahuje citlivý materiál. Pevně zakódovaná přihlašovací data, interní názvy hostitelů, proprietární obchodní logika nebo osobně identifikovatelná data mohou skončit v pastu. I bez explicitních tajných informací může struktura interního kódu odhalit architektonická rozhodnutí, která byste raději udrželi v soukromí. Riziko není hypotetické. Bezpečnostní výzkumníci opakovaně nacházeli přihlašovací data a interní tokeny ve veřejných pastech. Některé služby uchovávají pasty i poté, co je uživatel smaže, protože kopie existují v mezipamětech nebo zálohách. Neexistuje způsob, jak ověřit, co vzdálená služba s textem udělá poté, co dorazí. Jediným spolehlivým opatřením je udržet diff lokální, což znamená spustit ho v nástroji, který nikdy neposílá text přes síť.

Praktické použití lokálního diffu
Diff není jen pro revizi kódu. Několik běžných případů, kdy je lokální diff užitečný: Kontrola úprav dokumentu nebo konfiguračního souboru před commitováním. Porovnání dvou verzí Dockerfile, konfigurace Nginx nebo manifestu Kubernetes pro pochopení toho, co se přesně změnilo mezi nasazeními. Kontrola odchylek konfigurace mezi prostředími. Pokud by konfigurace pro produkci a staging měly být identické až na názvy hostitelů a tajné informace, diff okamžitě ukáže jakoukoli nezamýšlenou odchylku. Porovnání odpovědí API při ladění. Vložení dvou datových obsažností JSON z REST nebo GraphQL API a spuštění diffu na úrovni slov přesně ukáže přidaná pole, změněné hodnoty nebo odebrané klíče bez ručního procházení stovek řádků. Kontrola kódu generovaného LLM oproti základní linii. Když model přepíše funkci, diff na úrovni řádků ukáže, která logika se změnila a která zůstala stejná, rychleji než samostatné čtení obou verzí. Ve všech těchto případech může být zahrnutý text citlivý a udržení mimo vzdálený server je přímočarou volbou.
V prohlížeči, bez nahrávání
Nástroj text-diff na tomto webu provádí celý výpočet diffu ve vašem prohlížeči pomocí JavaScriptu. Vložíte dva texty do dvou panelů a diff se okamžitě vykreslí, řádek po řádku, až do 3000 řádků na stranu. Nic není odesláno na server. Text nikdy neopustí vaše zařízení. Implementace používá standardní algoritmus založený na LCS operující na řádcích: každý řádek je token a nástroj pomocí nejdelší společné podsekvence mezi oběma verzemi zjistí, zda je nezměněný, přidaný nebo odebraný. Nezměněné řádky se vykreslí bez zvýraznění, přidané zeleně, odebrané červeně, vedle průběžného počtu přidání a odebrání. Dnes zde není žádný režim na úrovni slov nebo znaků ani přepínač normalizace bílých znaků, takže řádek lišící se jen koncovými mezerami nebo stylem konce řádku se stále zobrazí jako změněný. Protože výpočet probíhá na straně klienta, funguje offline. Žádný účet, žádná historie, žádné uchovávání. Můžete porovnat lokální konfigurační soubor se šablonou, zkontrolovat patch před jeho aplikací nebo porovnat dvě odpovědi API, aniž by se jakýkoli text dostal ke třetí straně.
Nástroje v tomto článku
Časté dotazy
Je diff na základě řádků nebo slov lepší pro kód?
Pro většinu úloh revize kódu je diff na základě řádků standardem a nejsnáze čitelný, protože kód je strukturován po řádcích. Diff na základě slov by se hodil, když jsou řádky dlouhé a změnila se jen malá část, například hodnota JSON na jednom řádku, ale tento nástroj porovnává pouze na úrovni řádků; v takovém případě použijte zvýrazněný řádek jako ukazatel a menší rozdíl uvnitř něj si prohlédněte okem.
Proč online diff nástroje představují bezpečnostní riziko, i když používají HTTPS?
HTTPS chrání text při přenosu před odposlechem, ale nechrání ho poté, co dorazí na server. Provozovatel služby má plný přístup k vloženému obsahu a může ho zaznamenat, uložit nebo sdílet. TLS je o bezpečnosti přenosu, nikoli o tom, co příjemce s daty udělá.
Uchovává nástroj text-diff historii minulých porovnání?
Ne. Nástroj nemá žádný backend a neprovádí žádné síťové požadavky. Jakmile zavřete nebo znovu načtete záložku, text je pryč. Žádný účet, žádná uložená historie a žádný záznam na serveru.