Command Palette

Search for a command to run...

Text Diff Checker: Stoppen Sie die Änderungen an den Augen, die Sie nicht sehen können

Text Diff Checker: Stoppen Sie die Änderungen an den Augen, die Sie nicht sehen können

T
Toolz Team
|Jul 5, 2026|14 min read

Ein WP-Administy-Kunde hat mir einmal zwei Exporte seiner Plugin-Einstellungen geschickt – "Vor dem Update hat alles funktioniert, danach ist das Admin-Menü defekt. Nichts anderes hat sich geändert. " Zwei JSON-Blobs mit jeweils etwa 340 Zeilen. Ich las sie zweimal nebeneinander und stimmte ihm zuversichtlich zu: Identisch. Nichts hat sich geändert. Muss unser Fehler sein.

Es war nicht. Als ich endlich aufhörte, meinen Augen zu vertrauen und die beiden Dateien zu diffonieren, war es in Zeile 217: Eine Menürolle war von "administrator" auf "administrator " - Mit einem nachlaufenden Raum. Ein unsichtbarer Charakter. Ich hatte es zweimal persönlich darüber gelesen, weil menschliche Augen keine Strings vergleichen; sie passen Muster an und administrator und administrator haben die gleiche Form.

Dieses Support-Ticket hat meine Regel dauerhaft geändert: Wenn zwei Texte länger als zehn Zeilen sind, vergleiche ich sie nicht durch Lesen. je nachdem. Ein Diff-Algorithmus hat keine zu täuschenden Pattern-Matching-Verknüpfungen - er vergleicht jeden Charakter und meldet genau, was sich unterscheidet. der Text-Diff-Tool Auf toolz.dev tut dies in Ihrem Browser, was bedeutet, dass Kundenkonfigurationen, Verträge und unveröffentlichter Code niemals Ihre Maschine verlassen. So funktioniert Diffing tatsächlich und wie man es gut einsetzt.

tl; dr: Vergleichen Sie Texte niemals länger als ein paar Zeilen - Augen vermissen nachlaufende Leerzeichen, vertauschte Ziffern und Bearbeitungen mit einem Wort. Fügen Sie beide Versionen in die Text-Diff-Tool: grün = hinzugefügt, rot = entfernt, berechnet von derselben Myers-Algorithmusfamilie, die befähigt git diffdrohen einsetzen Linienmodus Für Code und Konfigurationen, Wortmodus für Prosa und Verträge. Bei strukturierten Daten ist json diff Vergleicht nach Bedeutung statt nach Text. Alles läuft clientseitig.


Wie funktioniert ein Diff-Algorithmus eigentlich?

Die Kernidee: Finden Sie die längste gemeinsame Folge (LCs) der beiden Texte - die längste Folge von Zeilen (oder Wörtern oder Zeichen), die in beiden in derselben Reihenfolge angezeigt werden. Alles in der LCS ist "unverändert". Was auch immer in Version A übrig ist, ist eine Löschung; was auch immer in Version B übrig bleibt, ist eine Ergänzung. Eine "modifizierte" Zeile ist nur ein Löschen und eine Ergänzung, die zufällig nebeneinander sitzt.

Die Standardmethode, dies effizient zu berechnen, stammt aus dem Papier von Eugene Myers 1986, "ein O(nd)-Differenzalgorithmus und seine Variationen"drohen Der elegante Teil ist das, was die Komplexität gebunden sagt: n ist die Eingabegröße, aber d ist das Anzahl der Unterschiededrohen Zwei fast identische Texte unterscheiden sich fast sofort, egal wie lang sie sind, denn die Arbeit des Algorithmus skaliert, wie unterschiedlich sie sind, nicht nur wie groß. Das ist der Grund, warum das Verteilen zweier 300-zeiliger Konfigurationen, die sich um eine Zeile unterscheiden, sofort anfühlt - der Algorithmus tut fast nichts, genau das ist genau die Situation, in der Ihre Augen die meiste Arbeit leisten und versagen.

Dieselbe Algorithmusfamilie ist die Standard-Engine in git diff, Gnu diffund die meisten Vergleichstools, die Sie jemals verwendet haben. (Git bietet auch patience und histogram Varianten, die manchmal mehr von Menschen lesbare Gruppierungen derselben Änderungen erzeugen - die einstellen von Änderungen ist gleich, die Darstellung ist unterschiedlich.)

Eine wichtige nicht offensichtliche Eigenschaft: Ein Diff ist nicht immer einzigartig. Wenn Sie zwischen zwei leeren Zeilen eine Leerzeile hinzufügen, ist die Leerzeile "neu" ist wirklich mehrdeutig, und verschiedene Werkzeuge können verschiedene hervorheben. Beide Antworten sind richtig.

Zeile, Wort oder Zeichendiff - Welcher Modus wann?

Die Granularität, die Sie vergleichen, ändert sich, wofür die Ausgabe gut ist. Dies falsch zu machen, ist der Hauptgrund, warum die Leute die Diff-Ausgabe "gestört" finden.

Linien-Ebene Wortlaut auf Charakter-Ebene
vergleicht ganze Linien als Atome Einzelne Wörter Einzelne Zeichen
Ein Ein-Wort-Bearbeitung zeigt als Ganze Linie entfernt + neu hinzugefügt Nur dieses Wort Nur die geänderten Buchstaben
am besten für Code, Konfigurationen, CSV-Zeilen Prosa, Verträge, Docs Tippfehler, Hashes, codierte Zeichenfolgen
Schwäche Lange-Absatz-Bearbeitungen: Sie jagen immer noch innerhalb der Linie Rauschen über neu fließenden / neu umwickelten Text Unlesbar für große Änderungen
klassischer Benutzer git diff Legal Blackline / redaktionelle Überprüfung "Diese beiden API-Schlüssel sehen identisch aus."

konkretes Beispiel. Original: The quick brown fox jumps over the lazy dog. modifiziert: The quick red fox leaps over the lazy cat.

  • Linienmodus Markiert den gesamten Satz als geändert - genau, nicht hilfreich.
  • Wortmodus Highlights genau brown→red, jumps→leaps, dog→catdrohen
  • Zeichenmodus ist hier übertrieben, aber es ist der einzige Modus, der fangen würde admlnistrator Vs administratordrohen

Faustregel: Strukturierter Text (eine aussagekräftige Aussage pro Zeile) will Zeilenmodus; Fließender Text will Wortmodus; Zeichenmodus ist eine Lupe, die Sie herausziehen, wenn die anderen beiden "geändert" sagen, und Sie können nicht sehen, warum. Mein Trailing-Space-Fehler ist der kanonische Fall des Charaktermodus.

Wann ist ein eigenständiges Diff-Tool besser als Git?

Gits Diff ist ausgezeichnet Für Dinge, die im selben Repository lebendrohen Eine überraschende Menge an Vergleichsarbeiten ist nicht:

Tickets unterstützen. Das Szenario aus meinem Intro - Export von zwei Einstellungen von einem Kunden. Sie sind in keinem Repo. beides einfügen in die Text-Diff-Tool Und die Antwort erscheint in Sekunden statt zwei fehlgeschlagenen Durchlesungen.

Konfigurieren Drift. Staging nginx config vs production nginx config. herrschend .env VS das Backup von bevor die Dinge kaputt gingen. git diff Kann keine Dateien auf zwei verschiedenen Servern sehen; Kopieren und Einfügen können.

Formatierungsprüfung. Sie haben hübscher (oder phPCs oder schwarz) über eine Datei gelaufen und möchten Vertrauen, das sich geändert hat Nur Formatierungdrohen Diff the earing to the eheads and after: Wenn Sie etwas anderes als Leerzeichen, Zitate und Semikolons sehen, hat der Formatierer die Logik berührt und Sie möchten es jetzt wissen.

Zwei API-Antworten. Die Staging-Einheit gibt einen JSON-Körper zurück, die Produktion gibt einen anderen zurück und das Frontend wird nur im Staging unterbrochen. Diff die Antworten. (Für JSON speziell bevorzugen Sie die json diff - Es vergleicht die geparstisierte Struktur, so dass die Schlüsselreihenfolge und der Leerraum keine falschen positiven Ergebnisse erzeugen. Führen Sie beide Nutzlasten durch die JSON-Formater Zuerst, wenn Sie stattdessen einen lesbaren Text diff wollen.)

Dokumente und Verträge. Ein Verkäufer gibt den gleichen Vertrag mit geringfügigen Aktualisierungen zurück. "Word-Modus-Diff ist, wie Sie die Zahlungsbedingungen von Netto 30 auf Netto 15 in einem 40-seitigen Dokument zurückgeben. Redakteure und Anwälte haben dies schon immer gewusst - sie nennen es eine Blackline oder Redline.

Übersetzungs- und Lokalisierungsdateien. Vergleichen von zwei Versionen von a .po Datei, um zu sehen, welche Zeichenfolgen tatsächlich geändert wurden, bevor sie an Übersetzer zurückgesendet werden - ein echter WP-Administrations-Workflow, der das Bezahlen spart, um 400 unveränderte Zeichenfolgen erneut zu übersetzen.

Der rote Faden: Sobald beide Versionen als Text vorliegen, antwortet ein Diff-Tool mechanisch. Und weil das Toolz.dev-Tool clientseitig ist, überträgt es nicht an die Konfiguration eines Kunden oder eines nicht unterzeichneten Vertrags - das gleiche Argument wie der Rest der Datenschutz-First-Toolboxdrohen

Wie liest man die Diff-Ausgabe, ohne sich selbst zu täuschen?

Die Farbkonvention ist universell: Rot ist der exklusive Inhalt der alten Version (entfernt), grün ist die neue Version (hinzugefügt), unveränderter Text rendert für den Kontext. Eine geänderte Linie erscheint als rote Linie, gefolgt von ihrem grünen Ersatz.

Drei Gewohnheiten, die Diff Review tatsächlich zuverlässig machen:

Setzen Sie die Versionen in die richtigen Steckplätze. Alt/Original links (oder erstes Feld), rechts/modifiziert. Tauschen Sie sie und jede Ergänzung wird als Löschung gelesen - ich habe Leute gesehen, die zehn Minuten lang die falsche Richtung debuggen. Wenn der Ausgang rückwärts schaut, ist es wahrscheinlich.

Entscheiden Sie, was für ein Geräusch ist, bevor Sie beginnen. Neuformatierten Code vergleichen? Whitespace-Änderungen sind Rauschen - normalisieren oder ignorieren Sie sie. Vergleichen von YAML-Konfigurationen? Leerzeichen ist Bedeutung - Einrückung ist Struktur in YAML, also validieren Sie beide Seiten in der YAML-Validator und behandeln Sie jeden Raum als Signal. Das gleiche Tool, die Gegenrichtlinie und die Auswahl von falschem vergräbt entweder die wirkliche Änderung des Lärms oder versteckt sie.

Lesen Sie jeden Hunk, nicht nur den ersten. Der Nachlaufraum des Kunden war die Änderung Nr. 1 von 1. Aber wenn ein Diff vier Änderungen zeigt und der erste Ihr Symptom erklärt, ist die Versuchung, das Lesen aufzuhören, stark - und Veränderung Nr. 3 ist manchmal diejenige, die Sie nächste Woche beißt. Der Diff hat bereits den schwierigen Teil des menschlichen Probenahmefehlers im letzten Schritt wieder eingeführt;

Was kann Ihnen ein Textunterschied nicht sagen?

Es lohnt sich, ehrlich über die Grenzen zu sein:

  • Verschiebte Blöcke als Löschen + Hinzufügen gelesen. Schneiden Sie eine Funktion von der Oberseite einer Datei aus und fügen Sie sie unten ein: Der Diff meldet, dass er entfernt und hinzugefügt, nicht verschoben wurde. Einige Spezialwerkzeuge erkennen Bewegungen; einfache LCS-Technik.
  • Es vergleicht Text, nicht Bedeutung. 0.1 + 0.2 und 0.3 Diff als unterschiedlich (sie sind) aber auch sich benehmen anders im Gleitkomma - und umgekehrt "key": 1 Vs "key": 1.0 Kann textlich anders, aber semantisch identisch in Ihrer Sprache sein. Strukturierter Vergleich (wie die json diff) schließt einen Teil dieser Lücke für Datenformate.
  • Binärinhalte sind nicht in den Gültigkeitsbereich. Bilder, PDFs als Bytes, ausführbare Dateien – Text-Diff benötigt Text. Extrahieren Sie zuerst den Text oder verwenden Sie formatspezifische Tools.
  • Fall und Codierung werden wörtlich verglichen. READMEreadmeund ein UTF-8-Zitat ≠ ein ASCII-Gerade, obwohl sie in den meisten Schriftarten identisch aussehen. (Eine weitere Form-Muster-Falle für die Augen, ein weiterer Sieg für den Algorithmus.) vornormalisieren mit dem Gehäusekonverter Wenn der Fall für Ihren Vergleich keine Rolle spielt.

Häufig gestellte Fragen

Kann ich Dateien vergleichen oder nur Text einfügen?

der Text-Diff-Tool Arbeitet mit eingefügtem Text: Öffnen Sie jede Datei in einem beliebigen Editor, kopieren Sie und fügen Sie beide Seiten ein. Das macht es formatunabhängig - alles, was lesbarer Text (Code, Config, CSV, SQL, Prosa) ist, kann unabhängig von der Erweiterung verglichen werden.

Gibt es eine Größenbeschränkung für den Vergleich?

Die praktische Grenze ist der Speicher Ihres Geräts, da die Verarbeitung im Browser erfolgt. Dateien mit einigen tausend Zeilen vergleichen sich sofort; die Kostenskalen des Myers-Algorithmus mit der Anzahl der Unterschiede, so bleiben auch große, aber ähnliche Texte schnell. Hunderttausende von Linien mit massiven Unterschieden können einige Sekunden dauern.

Welchen Diff-Modus soll ich für Code verwenden?

Linienmodus. Code ist natürlich eine Ein-Aussage-pro-Zeile, also ordnet die Ausgabe von Zeilenebenen die Änderung der Änderungsmöglichkeiten an. Wechseln Sie nur dann in den Wort- oder Zeichenmodus, wenn eine Zeile als geändert gekennzeichnet ist und Sie den Unterschied darin nicht erkennen können - das sind normalerweise Leerzeichen, Anführungszeichen oder ein einzelnes Zeichen.

Welcher Modus eignet sich am besten für Verträge und Prosa?

Wortmodus. Prosaänderungen sind normalerweise Wortersetzungen und eingefügte Klauseln in langen Absätzen; der Linienmodus würde ganze Absätze kennzeichnen und Sie auf die Jagd führen. Die Hervorhebung auf Wortebene zeigt genau, welche Wörter geändert wurden - der gleiche Ansatz wie eine legale Blackline.

Ändert oder speichert der Diff meinen Text?

kein . Hervorhebungen nur in der gerenderten Ausgabe, Ihr Eingabetext ist unverändert, und da das Tool vollständig clientseitig läuft, wird keine Version übertragen oder gespeichert. Schließen Sie die Registerkarte und die Texte sind weg.

Warum hebt das Diff eine Linie hervor, die identisch aussieht?

Fast immer unsichtbare Zeichen: Nachfolgende Leerzeichen, Registerkarten gegen Leerzeichen, Fenster \r\n vs Unix \n Linienendungen, nicht kaputte Leerzeichen oder Unicode-Lookalikes (Curly vs Straight Quotes). Dies ist genau die Klasse der Veränderung, die menschliche Augen nicht sehen können und die Diff-Algorithmen immer fangen - mein Trailing-Space-Support-Ticket war eines davon.

Kann es bewegten Text erkennen?

Nicht als Bewegung. Standard-LCS-basiertes Diffing meldet einen verschobenen Block als gelöscht vom alten Speicherort und wird am neuen hinzugefügt. Wenn Sie einen Umzug vermuten, durchsuchen Sie den Text "Hinzufügen" im Original - ein genauer Treffer in der Datei bestätigt dies.

Wie unterscheidet sich JSON Diff von Text Diff?

Text diff vergleicht Zeichen; json diff Parsen sowohl Dokumente als auch Vergleiche der Struktur. Neu geordnete Schlüssel, geänderte Einrückungen und nachlaufende Kommas ergeben keine strukturellen Unterschiede, sodass nur Änderungen in den tatsächlichen Werten und Schlüsseln angezeigt werden. Verwenden Sie es, wenn beide Seiten gültig sind JSON; Zurück auf Text diff, wenn sie nicht sind.

Wie ignoriere ich Leerzeichen oder Fall beim Vergleich von Text?

Entscheiden Sie zuerst, ob es sich bei Whitespace um Rauschen oder Signal handelt: Im neuformatierten Code ist es Rauschen, aber in der YAML- oder Python-Einbuchtung ist es eine Struktur. Wenn es sich um Lärm handelt, normalisieren Sie beide Seiten vor dem Differential - Zusammenklappen Sie wiederholte Leerzeichen, ziehen Sie nach unten gerichteten Leerzeichen und stimmen Sie die Endungen über die Linien konsistent ab - so bleiben nur echte Änderungen erhalten. Um den Fall zu ignorieren, müssen beide Texte vor dem Vergleich in Kleinbuchstaben erfolgen, da der Diff Readme und Readme standardmäßig als unterschiedlich behandelt.

Welchen Algorithmus verwendet Git Diff?

Standardmäßig verwendet git diff eine Variante des Myers-Algorithmus, den gleichen Ansatz mit der längsten gemeinsamen Untersequenz wie Eugene Myers' 1986, den die meisten Diff-Tools gemeinsam nutzen. Git bietet auch Geduld- und Histogrammvarianten, die Änderungen besser lesbar gruppieren können, aber sie melden die gleichen Unterschiede - nur die Präsentation ändert sich. Dieses Tool verwendet dieselbe Myers-Algorithmusfamilie.

Frequently Asked Questions

The Text Diff tool works on pasted text: open each file in any editor, copy, paste both sides. That makes it format-agnostic — anything that's readable text (code, config, CSV, SQL, prose) can be compared, regardless of extension.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!