Kein Upload, 100% lokal, kein Konto

Artikel

Code-Schnipsel vergleichen ohne Hochladen

Jedes Mal, wenn Sie zwei Dateien in ein Online-Diff-Tool einfügen, verlässt dieser Code Ihren Computer. Konfigurationsdateien, Datenbankabfragen, API-Schlüssel in einem .env-Schnipsel: alles reist zu einem Server, den Sie nicht kontrollieren. Dieser Artikel erklärt, wie Diff-Algorithmen funktionieren, was Granularitätsoptionen in der Praxis bedeuten und warum es wichtig ist, den Vergleich lokal zu halten.

Was ein Diff berechnet

Ein Diff-Tool nimmt zwei Texte und findet die minimale Menge von Änderungen, die einen in den anderen umwandelt. Der Kerngedanke ist die längste gemeinsame Teilsequenz (LCS): die längste Sequenz von Zeilen (oder Tokens), die in beiden Texten in derselben Reihenfolge vorkommt, auch wenn sie nicht benachbart sind. Alles, was nicht in dieser gemeinsamen Teilsequenz enthalten ist, ist entweder eine Ergänzung in der neuen Version oder eine Löschung aus der alten. Der klassische Algorithmus dafür stammt von Myers (1986), der das kürzeste Bearbeitungsskript in O((N+M)D)-Zeit findet, wobei N und M die Längen der beiden Texte und D die Anzahl der Bearbeitungen sind. In der Praxis fügen die meisten Tools einen Vorverarbeitungsschritt hinzu, um führende und abschließende gemeinsame Zeilen zu ignorieren und so das Problem auf den geänderten Bereich zu reduzieren. Das Ergebnis ist ein Patch: eine Folge von Hunks, die jeweils einen zusammenhängenden Block aus Kontextzeilen, Löschungen und Ergänzungen beschreiben. Das ist das Format, das von Unix diff, Git und den meisten Code-Review-Tools verwendet wird.

Diagramm mit zwei Texteingaben, die durch ihre längste gemeinsame Teilsequenz ausgerichtet sind, mit verbundenen übereinstimmenden Zeilen und als Ergänzungen oder Löschungen markierten abweichenden Zeilen

Zeilen-, Wort- und Zeichengranularität

Die Granularität eines Diffs bestimmt, was als Vergleichseinheit gilt. Zeilenbasierter Diff ist der Standard in den meisten Tools: jede Zeile wird als einzelnes Token behandelt. Das ist schnell und erzeugt eine Ausgabe, die im Kontext leicht zu lesen ist, markiert aber eine ganze Zeile als geändert, auch wenn sich nur ein Wort in dieser Zeile unterscheidet. Diff auf Wortebene teilt jede Zeile vor dem Ausführen von LCS in Wörter auf. Das gibt ein feineres Bild davon, was sich innerhalb einer Zeile geändert hat, was für Prosa, Konfigurationswerte oder JSON nützlich ist. Diff auf Zeichenebene geht noch weiter und kann einen einzelnen geänderten Buchstaben innerhalb eines langen Bezeichners hervorheben. Die Behandlung von Leerzeichen erzeugt Rauschen. Eine Zeile, die auf CRLF endet, und dieselbe Zeile, die auf LF endet, werden bei einem strikten Byte-Vergleich als unterschiedlich angezeigt. Die meisten Tools bieten eine Option, Zeilenenden vor dem Diff zu normalisieren. Ebenso können abschließende Leerzeichen, Tabulatoren statt Leerzeichen als Einrückung und Leerzeilen spurious Diff-Ausgaben erzeugen. Die Aktivierung der Leerzeichennormalisierung ist beim Vergleich von Code aus verschiedenen Editoren oder Betriebssystemen in der Regel der richtige Standard.

Das Datenschutzrisiko von Online-Diff-Tools

Online-Diff- und Pastebin-Dienste sind praktisch: eine URL öffnen, zwei Schnipsel einfügen, eine farbige Ausgabe erhalten. Das Problem ist, dass der eingefügte Text an einen Drittanbieter-Server übertragen wird. Je nach Dienst kann dieser Text protokolliert, indiziert, unbegrenzt gespeichert oder an Analyseanbieter weitergegeben werden. Das ist besonders wichtig, wenn der Code vertrauliches Material enthält. Fest kodierte Zugangsdaten, interne Hostnamen, proprietäre Geschäftslogik oder personenbezogene Daten können alle in einem Paste landen. Selbst ohne explizite Geheimnisse kann die Struktur von internem Code Architekturentscheidungen offenbaren, die Sie lieber privat halten würden. Das Risiko ist nicht hypothetisch. Sicherheitsforscher haben wiederholt Zugangsdaten und interne Tokens in öffentlichen Pastes gefunden. Einige Dienste behalten Pastes auch nach dem Löschen durch den Nutzer, weil Kopien in Caches oder Backups existieren. Es gibt keine Möglichkeit zu überprüfen, was ein entfernter Dienst mit dem Text tut, sobald er angekommen ist. Die einzige zuverlässige Gegenmaßnahme ist, den Diff lokal zu halten, was bedeutet, ihn in einem Tool auszuführen, das den Text nie über das Netzwerk sendet.

Screenshot eines Browser-Netzwerkbereichs, der keine ausgehenden Anfragen zeigt, während zwei Code-Schnipsel im text-diff-Tool verglichen werden

Praktische Einsatzmöglichkeiten für einen lokalen Diff

Diff ist nicht nur für Code-Reviews. Einige häufige Fälle, in denen ein lokaler Diff nützlich ist: Überprüfen von Änderungen an einem Dokument oder einer Konfigurationsdatei vor dem Einpflegen. Vergleichen zweier Versionen eines Dockerfiles, einer Nginx-Konfiguration oder eines Kubernetes-Manifests, um genau zu verstehen, was sich zwischen Deployments geändert hat. Überprüfen von Konfigurationsabweichungen zwischen Umgebungen. Wenn Produktions- und Staging-Konfigurationen bis auf Hostnamen und Secrets identisch sein sollen, zeigt ein Diff sofort jede unbeabsichtigte Abweichung. Vergleichen von API-Antworten beim Debuggen. Zwei JSON-Payloads aus einer REST- oder GraphQL-API einfügen und einen Diff auf Wortebene ausführen, um hinzugefügte Felder, geänderte Werte oder entfernte Schlüssel zu finden, ohne Hunderte von Zeilen manuell zu lesen. Überprüfen von LLM-generiertem Code gegen eine Ausgangsbasis. Wenn ein Modell eine Funktion umschreibt, zeigt ein Diff auf Zeilenebene, welche Logik sich geändert hat und welche gleich geblieben ist, schneller als das unabhängige Lesen beider Versionen. In all diesen Fällen kann der betroffene Text vertraulich sein, und ihn von einem entfernten Server fernzuhalten ist die naheliegende Wahl.

Im Browser, ohne Hochladen

Das text-diff-Tool auf dieser Seite führt die gesamte Diff-Berechnung im Browser mit JavaScript aus. Sie fügen zwei Texte in die zwei Bereiche ein, und der Diff wird sofort angezeigt, Zeile für Zeile, bis zu 3000 Zeilen pro Seite. Es wird nichts an einen Server gesendet. Der Text verlässt nie Ihr Gerät. Die Implementierung verwendet einen standardmäßigen LCS-basierten Algorithmus, der auf Zeilen arbeitet: Jede Zeile ist ein Token, und das Tool ermittelt anhand der längsten gemeinsamen Teilfolge zwischen den beiden Versionen, ob sie unverändert, hinzugefügt oder entfernt wurde. Unveränderte Zeilen werden ohne Hervorhebung dargestellt, hinzugefügte Zeilen in Grün, entfernte Zeilen in Rot, neben einer laufenden Zählung der Ergänzungen und Löschungen. Es gibt heute keinen wort- oder zeichenbasierten Modus und keine Leerzeichennormalisierung, sodass eine Zeile, die sich nur durch abschließende Leerzeichen oder den Zeilenumbruchstil unterscheidet, weiterhin als geändert angezeigt wird. Da die Berechnung clientseitig läuft, funktioniert sie offline. Es gibt kein Konto, keinen Verlauf, keine Aufbewahrung. Sie können eine lokale Konfigurationsdatei mit einer Vorlage vergleichen, einen Patch vor dem Anwenden prüfen oder zwei API-Antworten vergleichen, ohne dass dieser Text einen Dritten erreicht.

Tools in diesem Artikel

Häufige Fragen

Ist zeilenbasierter oder wortbasierter Diff besser für Code?

Für die meisten Code-Review-Aufgaben ist der zeilenbasierte Diff der Standard und am einfachsten zu lesen, da Code nach Zeilen strukturiert ist. Wortbasierter Diff kann helfen, wenn Zeilen lang sind und sich nur ein kleiner Teil geändert hat, etwa in einem einzeiligen JSON-Wert, aber dieses Tool vergleicht nur auf Zeilenebene; nutzen Sie in diesem Fall die hervorgehobene Zeile als Hinweis und suchen Sie den kleineren Unterschied darin von Auge.

Warum stellen Online-Diff-Tools ein Datenschutzrisiko dar, auch wenn sie HTTPS verwenden?

HTTPS schützt den Text beim Transport vor dem Abhören, aber nicht, sobald er den Server erreicht hat. Der Dienstbetreiber hat vollen Zugriff auf den eingefügten Inhalt und kann ihn protokollieren, speichern oder weitergeben. TLS betrifft die Transportsicherheit, nicht das, was der Empfänger mit den Daten macht.

Speichert das text-diff-Tool einen Verlauf früherer Vergleiche?

Nein. Das Tool hat kein Backend und stellt keine Netzwerkanfragen. Sobald Sie den Tab schließen oder neu laden, ist der Text weg. Es gibt kein Konto, keinen gespeicherten Verlauf und kein serverseitiges Protokoll.