Diff Checker
Compare code or text with line-by-line diff and unified output.
Geprüft von Aygul Dovletova · Zuletzt geprüft
So verwendest du den Diff-Prüfer
- Füge die Originaldatei in den linken Editor ein. Diese wird als Basis behandelt - der "Vorher"-Zustand.
- Füge die geänderte Datei in den rechten Editor ein. Alles, was das Werkzeug meldet, ist relativ dazu, wie diese von der linken abweicht.
- Klicke auf Vergleichen. Das Diff-Fenster rendert darunter mit zeilenebenen Ergänzungen in Grün, Löschungen in Rot und unverändertem Kontext in Grau.
- Lies die Rinnsal-Zahlen. Jede geänderte Zeile zeigt die ursprüngliche Zeilennummer und die neue Zeilennummer; gelöschte Zeilen zeigen nur die ursprüngliche, hinzugefügte Zeilen nur die neue, damit du direkt zum offending Ort in deiner echten Datei springen kannst.
- Als vereinheitlichten Diff kopieren, um einen Patch im genauen Format zu erhalten, das
git apply,patchund Code-Review-Werkzeuge verbrauchen. Füge diesen in einen PR-Kommentar ein, wenn inline Review-Kommentare nicht ausdrucksstark genug sind. - Verwende Tauschen, um die Seiten umzudrehen, was praktisch ist für die Überprüfung "Würde das Anwenden dieses Patches in umgekehrter Reihenfolge Sinn ergeben?" Verwende Löschen, um beide Editoren zurückzusetzen.
Wie der Vergleich funktioniert
Der Prüfer implementiert den klassischen Myers-Diff-Algorithmus aus Eugene Myers' Papier von 1986 "An O(ND) Difference Algorithm and Its Variations" - derselbe Algorithmus, den Git seit dem ersten Tag als Standard verwendet. Er teilt beide Eingaben nach Zeilenumbrüchen auf, behandelt jede Zeile als atomisches Token und durchläuft einen Bearbeitungsgraph, um das kürzeste Bearbeitungsskript zu finden, das das Original in das Geänderte verwandelt. Das Ergebnis ist eine Sequenz von Hunks: zusammenhängende Läufe unveränderter Zeilen mit eingefügten und gelöschten Zeilen dazwischen. Das Ausgabe-Rendering erfolgt in JavaScript ohne innerHTML-Zuweisungen, sodass das Einfügen von Zeilen mit <script> oder anderem HTML-artigem Text kein Markup injizieren kann. Die Schaltfläche Als vereinheitlichten Diff kopieren umschließt jeden Hunk im kanonischen @@ -a,b +c,d @@-Header, der von GNU diff, Git und Mercurial verwendet wird.
Wann du es verwenden würdest
- Überprüfen eines Pull Requests offline, wenn du die beiden Dateien auf der Festplatte hast, aber keine Git-Geschichte sie verbindet.
- Vergleichen zweier Versionen einer Konfigurationsdatei - Nginx, Terraform, YAML - die dir ein Teamkollege ohne Kontext per E-Mail geschickt hat.
- Erstellen eines sauberen vereinheitlichten Diffs zum Einfügen in ein JIRA-Ticket oder einen Chat-Kanal als Beweis dafür, was sich geändert hat.
- Überprüfen, dass deine Build-Artefakt-Ausgabe über zwei Läufe byteidentisch ist, indem die generierten Dateien verglichen werden.
- Verifizieren, dass das Ausführen eines Formatierers (
prettier,gofmt,black) keine unbeabsichtigten Inhaltsänderungen zusätzlich zur Formatierung eingeführt hat. - Entdecken der kleinsten Änderung, die eine Regression verursacht hat, indem das letzte grüne Deployment mit dem ersten roten verglichen wird.
Häufige Fallstricke und Randfälle
- Abschließende Zeilenumbruch-Unterschiede. Eine Datei mit einem abschließenden Zeilenumbruch und eine ohne sind nicht identisch; das Werkzeug zeigt dies als Änderung an der letzten Zeile an, was dem "\\ Kein Zeilenumbruch am Dateiende"-Marker von
diffentspricht. - CRLF vs. LF. Das Einfügen von Windows-Zeilenenden auf einer Seite und Unix-Stil auf der anderen markiert jede Zeile als geändert. Normalisiere vorher mit einem Werkzeug wie
dos2unix, oder erwarte ein Meer von Rot und Grün. - Tab versus Leerzeichen-Einrückung. Myers Diff ist zeilenbasiert und markiert ein Tab-zu-Leerzeichen-Reflow als vollständige Neuschreibung jeder Zeile. Verwende ein Leerraumignorierendes Werkzeug wie
git diff -w, wenn das die Absicht ist. - Sehr lange Dateien. Myers ist O(ND), wobei N die Gesamtanzahl der Token und D die Bearbeitungsdistanz ist. Eingaben mit Zehntausenden von Zeilen und großem D können mehrere Sekunden im Browser dauern, bevor etwas gerendert wird.
- Binäre Daten. Zeilenbasierte Diffs sind bei kompilierten Binärdateien, Bildern oder gepackten Archiven bedeutungslos. Das Werkzeug produziert immer noch eine Ausgabe, aber es ist Rauschen.
- Identische Dateien. Die Ausgabe zeigt die gesamte Datei als unveränderte graue Zeilen ohne Hunks - eine nützliche Bestätigung, dass sich nichts verschoben hat.
Hintergrund zum vereinheitlichten Diff-Format
Das vereinheitlichte Diff-Format wurde von Wayne Davison für GNU diff in den frühen 1990ern eingeführt und ist jetzt de facto über Git, Mercurial, SVN und jedes Code-Review-Werkzeug standardisiert. Ein vereinheitlichter Diff öffnet mit zwei Datei-Headern, die mit --- und +++ beginnen, gefolgt von einem oder mehreren Hunks. Jeder Hunk beginnt mit einem Header der Form @@ -originalStart,originalZeilen +neuStart,neuZeilen @@, gefolgt von den Zeilen selbst: leerzeichen-präfixiert für Kontext, minus-präfixiert für entfernte Zeilen, plus-präfixiert für hinzugefügte Zeilen. Standardmäßig verwendet GNU diff drei Zeilen Kontext, was auch der Git-Standard ist. POSIX 1003.1 standardisiert das Format, und Werkzeuge wie patch können es konsumieren, um die Änderung anderswo erneut anzuwenden. Die Ausgabe dieses Werkzeugs ist bytekompatibel mit diesen Verbrauchern, also kannst du kopieren, in patch -p0 einfügen und die Änderung landen sehen.
Vergleich mit Alternativen
git diff ist das richtige Werkzeug, wenn beide Seiten in einem Repository leben - es kennt Umbenennungen, behandelt Binärerkennung und unterstützt -w für leerrauminsensitiven Vergleich. GNU diff -u ist der POSIX-Arbeitspferd für Ad-hoc-Dateipaare auf deiner Festplatte. meld, kdiff3 und Beyond Compare bieten Drei-Wege-Merge-Ansichten, die dieses Browser-Werkzeug nicht erreichen kann. Der eingebaute Diff-Editor von VS Code hat Syntaxhervorhebung und inline wortebene Anpassungen. Verwende diesen Web-Prüfer, wenn die Dateien noch nicht auf deinem Rechner sind - du hast sie aus Slack, E-Mail oder einem Log-Viewer eingefügt - und du einfach einen vereinheitlichter-Diff-Kopier-einfügebereiten Patch möchtest, ohne ein Terminal zu öffnen. Wenn deine Aufgabe ein Drei-Wege-Merge oder eine repo-weite leerraumignorier Überprüfung ist, greife zu den dedizierten Werkzeugen.
Häufig gestellte Fragen
Ist der Algorithmus wirklich Myers Diff?
Ja. Der Prüfer verwendet die Vorwärtspfad-Variante aus Eugene Myers' Papier von 1986, denselben Ansatz, den Git standardmäßig verwendet (du kannst Git für pathologische Fälle auf patience- oder histogram-Varianten umschalten). Er produziert das kürzeste Bearbeitungsskript, das für die meisten Code-Änderungen dem entspricht, was ein menschlicher Prüfer erwartet.
Führt das Werkzeug für große Dateien einen server-seitigen Diff durch?
Nein. Die Diff-Funktion ist eine einfache JavaScript-Implementierung, die im Haupt-Thread deines Browser-Tabs läuft. Es gibt keinen fetch-Aufruf, kein Worker-Offloading und kein Backend. Für Dateien mit bis zu ungefähr 10.000 Zeilen auf jeder Seite ist der Diff in unter einer Sekunde auf einem modernen Laptop abgeschlossen. Darüber hinaus kann es zu einem kurzen UI- Einfrieren kommen, während der Bearbeitungsgraph durchlaufen wird, aber die Berechnung bleibt lokal.
Kann ich den vereinheitlichten Diff über git apply anwenden?
Ja, solange die Datei-Header dem entsprechen, was git erwartet. Die Ausgabe "Als vereinheitlichten Diff kopieren" verwendet --- a/<dateiname> und +++ b/<dateiname>-Stil-Header mit generischen Platzhalternamen. Ersetze diese durch die echten Pfade relativ zu deinem Repo-Stammverzeichnis, und der Patch wird sauber mit git apply oder mit GNU patch -p1 für Nicht-git-Workflows angewendet. Zeilenendungs-Abweichungen sind die häufigste Ursache für fehlgeschlagene Anwendungen; führe vorher dos2unix aus, wenn du Zweifel hast.
Was passiert mit sehr großen Dateien?
Die Benutzeroberfläche bleibt reaktionsfähig, bis die Berechnung beginnt; sobald Vergleichen geklickt wird, ist der Haupt-Thread damit beschäftigt, den Bearbeitungsgraphen zu durchlaufen. Für zwei 50.000-Zeilen-Dateien mit vielen Unterschieden erwarte einige Sekunden Arbeit, bevor die Ausgabe gerendert wird. Wenn du regelmäßig Dateien dieser Größe vergleichst, verwende im Terminal git diff --no-index oder GNU diff -u, die in C geschrieben sind und sofort fertig sind.
Warum werden Tab- und Leerzeichen-Versionen derselben Zeile als unterschiedlich markiert?
Der Vergleich ist auf Zeilenebene bytegenau. Eine Zeile, die von Tabs auf vier Leerzeichen reformatiert wurde, sind buchstäblich andere Bytes, also markiert jede Zeile als geändert. Das ist oft das, was du beim Überprüfen eines Sicherheits-Patches möchtest, aber normalerweise nicht, was du beim Überprüfen einer formatiererverursachten Änderung möchtest. Normalisiere vorher mit einem Werkzeug wie expand, untabify oder prettier, wenn du nur semantische Änderungen sehen möchtest.
Erkennt das Werkzeug verschobene Blöcke?
Nein. Myers Diff meldet jeden verschobenen Block als Löschung am alten Standort und als Einfügung am neuen. Erweiterte Werkzeuge (git --color-moved, IntelliJ) heben Verschiebungen in einer dritten Farbe hervor. Für große Refactorings erwäge einen semantischen Diff wie difftastic, der die Quelle zuerst in einen AST analysiert.
Gibt es datenschutzrechtliche Bedenken beim Einfügen von proprietärem Code?
Der Vergleich läuft in derselben JavaScript-Sandbox wie deine Seite, ohne ausgehenden Netzwerkaufruf mit den Eingaben. Kein Analytics-Pixel erfasst die Textbereiche, kein Service-Worker cacht den Inhalt, und das Schließen des Tabs löscht alles aus dem Speicher. Allerdings können Zwischenablage-Manager auf deinem Betriebssystem eingefügten Inhalt unbegrenzt behalten - beachte diesen Vektor, wenn die Dateien hochsensibel sind.
Was ist der Unterschied zwischen vereinheitlichtem Diff und Kontext-Diff?
Kontext-Diff ist das ältere Format (diff -c), mit separaten Blöcken, die Vorher- und Nachher-Zeilen zeigen, umrahmt von *** und ---. Vereinheitlichter Diff (diff -u) verschränkt sie mit -/+-Präfixen und einem einzelnen @@-Header pro Hunk, was kompakter und einfacher zu lesen ist. Vereinheitlichter Diff gewann den Formatkrieg in den späten 1990ern und ist das, was Git, Mercurial, GitHub, GitLab und Gerrit ausschließlich verwenden.
Wie unterscheidet sich das vom text-diff-Werkzeug auf dieser Site?
Dieser Prüfer ist für Datei-zu-Datei-Vergleiche optimiert: zeilenebenen Myers-Diff, vereinheitlichte Diff-Ausgabe, nebeneinander stehende Zeilennummern und eine Monospace-Schriftart, die für Code geeignet ist. Die text-diff-Seite zielt auf kürzere Prosa und inline wortebene Änderungen, die für Korrekturlesen und Übersetzungsüberprüfung besser sind. Wenn deine Eingabe Code, Konfigurationsdateien, Protokolle oder beliebige zeilengetrennte Inhalte sind, ist das die richtige Seite; wenn du zwei Absätze Deutsch vergleichst, bevorzuge text-diff.
Kann ich die Ausgabe auf einem Mac mit patch anwenden?
Ja. macOS liefert BSD patch mit, das GNU-vereinheitlichte Diffs gut liest. Speichere den Diff in einer Datei, wechsle in das Verzeichnis des Originals und führe patch -p1 < aenderungen.diff aus (oder -p0, wenn Header root-absolute Pfade verwenden). Für GNU-patch-Verhalten: brew install gpatch.
Mehr Developer Tools
AI Token Counter
Count tokens for GPT-4o, Claude, and Gemini models instantly.
Open toolBase64 Encoder & Decoder
Encode UTF-8 text to Base64 online or decode Base64 back to UTF-8 and plain text. Runs in your browser with no upload.
Open toolBulk URL Encode / Decode
Encode or decode many URLs at once. Paste a newline-separated list and the tool processes each line in parallel, preserving order and blank lines.
Open toolchmod Calculator
Calculate and convert Unix file permission modes between octal and symbolic.
Open toolCode Screenshot
Create beautiful code snippet images with customizable themes.
Open toolColor Converter
Convert colors between HEX, RGB, HSL and CMYK formats.
Open tool