🔍
Entwickler-Tools
March 19, 20266 min readBy BrowseryTools Team

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.

diffTextvergleichgitCode-ReviewDateivergleich

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 →