So vergleichen Sie Textdateien und finden Unterschiede ohne Software
Erfahren Sie, wie Text-Diff-Algorithmen funktionieren, wie man Unified-Diff-Ausgaben liest, den Unterschied zwischen Zeilen- und Wortebene-Diffs und wie git diff intern funktioniert.
Jeder Entwickler hat diese Situation erlebt: zwei Versionen einer Datei, die identisch sein sollten, aber irgendetwas hat sich geändert. Vielleicht ist es eine Konfigurationsdatei, die auf einem Server manuell bearbeitet wurde. Vielleicht ist es ein Vertrag, der von einem Anwalt mit nicht offenbarten Änderungen zurückgekommen ist. Vielleicht ist es eine Übersetzungsdatei, die ein Dienstleister zurückgegeben hat und die Sie darauf prüfen müssen, ob nichts versehentlich gelöscht wurde. In allen diesen Fällen lautet die Antwort dieselbe: einen Diff ausführen.
Sie können zwei Textblöcke sofort mit dem BrowseryTools Text-Diff-Tool vergleichen — kostenlos, ohne Anmeldung, alles läuft in Ihrem Browser.
Warum Text-Diffing wichtig ist
Text-Diffing ist nicht nur ein Entwickler-Tool. Jede Situation, in der zwei Versionen eines Dokuments existieren und Unterschiede sichtbar gemacht werden mĂĽssen, ist ein Diffing-Problem:
- Code-Review — verstehen, was sich zwischen zwei Versionen von Quellcode geändert hat, bevor ein Merge genehmigt wird
- Vertrags- und Rechtsdokument-Vergleich — genau feststellen, welche Klauseln zwischen Entwürfen hinzugefügt, entfernt oder geändert wurden
- Konfigurationsmanagement — bestätigen, dass eine eingesetzte Konfigurationsdatei mit der Version in der Versionskontrolle übereinstimmt
- Übersetzte Inhaltsprüfung — prüfen, ob ein übersetztes Dokument dieselben Abschnitte wie das Original abdeckt
- Datenvalidierung — CSV-Exporte aus zwei Systemen vergleichen, um Diskrepanzen zu finden
- Korrekturlesen — unbeabsichtigte Änderungen zwischen einem Dokumententwurf und seiner veröffentlichten Version erkennen
Wie Diff-Algorithmen funktionieren
Das Kernproblem, das ein Diff-Algorithmus löst, lautet: Gegeben zwei Sequenzen A und B, finde den minimalen Satz von Bearbeitungen (Einfügungen und Löschungen), der erforderlich ist, um A in B umzuwandeln. Das ist formal das Longest-Common-Subsequence-Problem (LCS). Der Diff meldet dann, was nicht im LCS war — die Zeilen, die nur in A vorhanden sind (Löschungen), und die Zeilen, die nur in B vorhanden sind (Einfügungen).
Zwei Algorithmen dominieren praktische Implementierungen:
- Myers-Diff (1986) — der Algorithmus hinter dem ursprünglichen Unix-
diff-Befehl und Git. Eugene Myers entwickelte ihn, um das kürzeste Bearbeitungsskript (den Diff mit den wenigsten Einfügungen und Löschungen insgesamt) in O(ND)-Zeit zu finden, wobei N die Gesamtgröße beider Eingaben und D die Anzahl der Unterschiede ist. Er ist schnell und erzeugt minimale Diffs, kann aber bei großen verschobenen Code-Blöcken unintuitive Ausgaben erzeugen. - Patience-Diff — entwickelt von Bram Cohen (Schöpfer von BitTorrent) und von Bazaar verwendet, später von Kaleidoscope populär gemacht. Statt zeilenweise vorzugehen, gleicht Patience-Diff zunächst eindeutige Zeilen ab, die in beiden Dateien genau einmal vorkommen. Das erzeugt Ausgaben, die Funktions- und Block-Grenzen bei Quellcode viel besser bewahren als Myers-Diff. Git unterstützt ihn via
git diff --patience.
Unified-Diff-Ausgabe lesen
Das Unified-Diff-Format ist die Standardausgabe von git diff und den meisten Diff-Tools. Sobald Sie die Notation verstehen, wird sie sofort lesbar.
--- a/config.yml (original file) +++ b/config.yml (modified file) @@ -10,7 +10,8 @@ (hunk header) server: host: localhost - port: 3000 + port: 8080 + timeout: 30 debug: false
Die wichtigsten Elemente:
- Zeilen mit
-am Anfang — im Original vorhanden, in der neuen Version entfernt (rot dargestellt) - Zeilen mit
+am Anfang — nicht im Original, in der neuen Version hinzugefügt (grün dargestellt) - Zeilen ohne Präfix (Leerzeichen) — unveränderte Kontextzeilen zur Orientierung
- Der
@@-Abschnitts-Header — lautet: „ab Zeile 10, zeigt 7 Zeilen aus dem Original; ab Zeile 10, zeigt 8 Zeilen aus der neuen Version." Das Format ist@@ -start,count +start,count @@.
Wort-, Zeilen- und Zeichenebene-Diff
Die Granularität eines Diffs bestimmt, wie nützlich er für eine gegebene Aufgabe ist.
- Zeilenebene-Diff — der Standard für Quellcode. Jede Zeile wird als atomare Einheit behandelt. Schnell und für Code geeignet, wo Zeilen kurz und bedeutsam sind. Wenn sich ein einzelnes Wort in einem langen Absatz ändert, wird die gesamte Zeile als geändert angezeigt.
- Wortebene-Diff — geeignet für Prosa und Dokumentation. Geänderte Wörter innerhalb einer Zeile werden einzeln hervorgehoben, was bei textlastigen Dokumenten ein viel klareres Signal gibt. Die meisten Dokumentenvergleichs-Tools (Microsoft Word Änderungsverfolgung, Google Docs Versionsverlauf) arbeiten auf Wortebene.
- Zeichenebene-Diff — hebt einzelne Zeichenänderungen innerhalb von Wörtern hervor. Am nützlichsten zur Erkennung subtiler Tippfehler, Leerraumänderungen, unsichtbarer Zeichen (Null-Breite-Leerzeichen, geschützte Leerzeichen) oder Kodierungsunterschiede. Unverzichtbar für den Vergleich von Daten, die visuell identisch aussehen, sich aber auf Byte-Ebene unterscheiden.
Das BrowseryTools Text-Diff-Tool hebt Unterschiede inline hervor und macht es einfach, Änderungen auf einen Blick zu erkennen, ohne das Unified-Diff-Format manuell lesen zu müssen.
Git-Diff unter der Haube
Wenn Sie git diff ausführen, berechnet Git den Myers-Diff zwischen den in seiner Objektdatenbank gespeicherten Objektversionen. Einige nützliche Flags ändern das Verhalten:
git diff # unstaged changes vs last commit git diff --staged # staged changes vs last commit git diff HEAD~3 # current state vs 3 commits ago git diff main...feature # what feature branch adds to main git diff --word-diff # word-level highlighting git diff --patience # use patience algorithm (better for code) git diff --stat # summary: files changed, insertions, deletions
Speziell zu git diff main...feature: Die Drei-Punkte-Notation zeigt, was der Feature-Branch seit seiner Abzweigung von main hinzugefügt hat, und schließt Änderungen aus, die auf main seit dem Branch-Punkt erfolgt sind. Das ist fast immer das, was Sie für einen Pull-Request-Review möchten, im Gegensatz zur Zwei-Punkte-Notation main..feature, die die aktuellen Spitzen beider Branches direkt vergleicht.
Praktische Anwendungsfälle
Konfigurationsdateien vergleichen
Konfigurationsdateien (YAML, TOML, JSON, .env) sind häufige Quellen von Produktionsfehlern, wenn eingesetzte Versionen von versionskontrollierten Versionen abweichen. Bevor Sie ein mysteriöses Produktionsproblem debuggen, deckt das Vergleichen der Live-Konfiguration mit der erwarteten Konfiguration die Ursache oft sofort auf.
Vertrags- und Dokumentenvergleich
Wenn ein Vertragsentwurf von der Gegenseite zurückkommt, vertrauen Sie niemals einer Zusammenfassung der Änderungen. Exportieren Sie beide Versionen als Klartext und führen Sie einen Diff durch. Juristen sind dafür bekannt, definierte Begriffe zu ändern, Haftungsobergrenzen einzufügen oder Benachrichtigungsfristen zu ändern, was ein schnelles Lesen verpasst. Ein Wortebene-Diff macht jede Änderung sichtbar.
Ăśbersetzte Dokumente prĂĽfen
Beim Arbeiten mit ĂĽbersetzten Inhalten vergleichen Sie die Struktur des ĂĽbersetzten Dokuments mit der Quelle. Ein struktureller Diff von AbschnittsĂĽberschriften und Absatzzahlen zeigt, ob Abschnitte bei der Ăśbersetzung versehentlich ausgelassen oder zusammengefĂĽhrt wurden.
Diff-Tools im Vergleich
- git diff — eingebaut, Zeilenebene, Unified-Diff-Format, keine GUI. Die Grundlage für alle Code-Arbeiten.
- vimdiff — terminalbasierter Seite-an-Seite-Diff in Vim. Leistungsfähig für schnelle Vergleiche, ohne das Terminal zu verlassen; steile Lernkurve.
- Beyond Compare — kommerzielles Desktop-Tool mit Ordner-Synchronisierung, Binär-Diff und Drei-Wege-Merge. Der Goldstandard für Dokumentenvergleiche ohne Entwicklerhintergrund.
- Meld — kostenlose, plattformübergreifende GUI-Diff-Tool mit Drei-Wege-Merge-Unterstützung. Die beste kostenlose Alternative zu Beyond Compare.
- BrowseryTools Text-Diff — sofort, browserbasiert, keine Installation. Am besten für schnelle einmalige Vergleiche, besonders bei Text, den Sie nicht in einen Online-Dienst einfügen möchten.
Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →