So funktioniert der Diff-Checker
Beide Texte werden in Zeilen zerlegt, und die Seite findet die längste Folge von Zeilen, die beide in derselben Reihenfolge gemeinsam haben (die längste gemeinsame Teilfolge). Alles andere ist eine Änderung: Zeilen nur im Original sind entfernt, Zeilen nur im geänderten Text sind hinzugefügt. Sie nutzt den Algorithmus von Eugene Myers, denselben wie GNU diff und git diff, und findet daher die kleinste Menge an Änderungen.
Steht ein Block entfernter Zeilen direkt neben einem Block hinzugefügter Zeilen, werden sie der Reihe nach gepaart und noch einmal Wort für Wort verglichen. Die abweichenden Wörter werden markiert, sodass eine geänderte Portnummer oder ein geänderter Pfad in einer langen Zeile auffällt. Haben zwei gepaarte Zeilen wenig gemeinsam, wird stattdessen die ganze Zeile als geändert angezeigt.
„Leerzeichen ignorieren“ behandelt Folgen aus Leerzeichen und Tabs als ein Leerzeichen und überspringt sie an den Zeilenenden, was nach einer neuen Einrückung hilft. „Groß- und Kleinschreibung ignorieren“ vergleicht Buchstaben ohne Unterscheidung von Groß- und Kleinbuchstaben. Zeilenenden (Windows CRLF oder Unix LF) zählen nie als Unterschied. Lange unveränderte Abschnitte werden eingeklappt, wobei um jede Änderung drei Zeilen Kontext bleiben.
Beispiel
Das Beispiel ist eine nginx-Site, die von reinem HTTP auf HTTPS umgestellt wurde. Das Original hat 11 Zeilen, die geänderte Version 12. Der Diff findet 7 unveränderte, 4 entfernte und 5 hinzugefügte Zeilen. In der listen-Zeile wurde nur „80“ zu „443 ssl“ und in der root-Zeile nur „html“ zu „example“, daher sind diese Wörter markiert. Als Unified Diff sieht das so aus:
--- original.conf
+++ changed.conf
@@ -1,11 +1,12 @@
server {
- listen 80;
+ listen 443 ssl;
+ http2 on;
server_name example.com www.example.com;
- root /var/www/html;
+ root /var/www/example;
+ ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
+
location / {
try_files $uri $uri/ =404;
}
-
- access_log /var/log/nginx/access.log;
}
Zeilen mit einem Minus am Anfang sind entfernt, mit einem Plus hinzugefügt, mit einem Leerzeichen unveränderter Kontext. Der Kopf @@ -1,11 +1,12 @@ bedeutet, dass der Block die Zeilen 1 bis 11 des Originals und 1 bis 12 des geänderten Textes umfasst. Mit dem Befehl patch lässt sich eine solche Datei auf das Original anwenden: patch original.conf changes.diff.
Fragen
Wie vergleiche ich zwei Texte auf Unterschiede?
Fügen Sie die ältere Version in das linke und die neuere in das rechte Feld ein. Die Unterschiede erscheinen sofort: entfernte Zeilen in Rot, hinzugefügte in Grün, die geänderten Wörter darin markiert. Mit „Tauschen“ drehen Sie die Seiten um, falls Sie die Texte falsch herum eingefügt haben.
Wird mein Text irgendwohin hochgeladen?
Nein. Der Vergleich läuft per JavaScript in Ihrem Browser, und der Text verlässt diese Seite nie. Das macht ihn sicher für Konfigurationen, Logs und Code, die Sie nicht in eine Seite einfügen würden, die Text an einen Server sendet. Schließen Sie den Tab, ist er weg.
Was bewirkt „Leerzeichen ignorieren“ in einem Diff?
Zeilen gelten als gleich, wenn sie sich nur im Leerraum unterscheiden: Mehrere Leerzeichen oder Tabs zählen als ein Leerzeichen, und Leerzeichen am Anfang oder Ende einer Zeile werden ignoriert. Das hilft, nachdem eine Datei neu eingerückt oder Tabs in Leerzeichen umgewandelt wurden. Die Wörter in geänderten Zeilen werden genauso verglichen.
Wie vergleiche ich zwei Dateien auf der Kommandozeile?
Unter Linux und macOS: diff -u old.conf new.conf, oder git diff --no-index old.conf new.conf für Farben und Wortmarkierungen (dazu --word-diff). Unter Windows: fc old.conf new.conf in cmd, oder Compare-Object (Get-Content old.conf) (Get-Content new.conf) in PowerShell. Hängen Sie -w an diff an, um Leerzeichen zu ignorieren.
Was bedeutet @@ -1,11 +1,12 @@ in einem Diff?
Es ist der Kopf eines Blocks (Hunk) in einem Unified Diff. -1,11 bedeutet, dass der Block in Zeile 1 der alten Datei beginnt und 11 Zeilen umfasst; +1,12 bedeutet, dass er in Zeile 1 der neuen Datei beginnt und 12 umfasst. Darunter sind Zeilen mit - entfernt, Zeilen mit + hinzugefügt, und ein Leerzeichen steht für unveränderten Kontext.