Ansicht in Deutsch Auf Englisch wechseln

Diff-Prüfer

Füge zwei Textstücke ein und sieh dir die hervorgehobenen Unterschiede an.

Diff

 
  1. Füge den Originaltext in Text A ein.
  2. Füge die geänderte Version in Text B ein.
  3. Wähle Zeilen für Code/Konfig oder Wörter für Prosa.
  4. Schalte Leerzeichen ignorieren oder Groß-/Kleinschreibung ignorieren um, wenn unsichtbare Änderungen Rauschen hinzufügen.
  5. Lies die hervorgehobene Ausgabe unten — grün ist hinzugefügt, rot ist entfernt.
Was macht es?

Der Diff-Prüfer vergleicht zwei Textstücke und zeigt genau, was hinzugefügt, entfernt oder unverändert gelassen wurde. Der Zeilenmodus behandelt jede Zeile als Einheit — ideal für Quellcode und Konfig, wo typischerweise eine ganze Zeile auf einmal geändert wird. Der Wortmodus teilt an Leerzeichen und ist besser für Prosa, wo dir Bearbeitungen auf Token-Ebene wichtig sind.

Beispiel

Text A:

function greet(name) {
  console.log("Hello, " + name);
}

Text B:

function greet(name) {
  if (!name) name = "world";
  console.log(`Hello, ${name}!`);
}

Diff im Zeilenmodus:

  function greet(name) {
+   if (!name) name = "world";
-   console.log("Hello, " + name);
+   console.log(`Hello, ${name}!`);
  }

Häufige Fehler und Fallstricke

Wenn zwei Zeilen identisch aussehen, aber der Diff sie trotzdem als geändert markiert, ist die Ursache fast immer ein unsichtbares Zeichen oder ein Unterschied in der Groß-/Kleinschreibung. Hier sind die üblichen Verdächtigen.

  • CRLF vs LF Zeilenenden. Windows-Dateien beenden Zeilen mit \r\n, Unix-Dateien mit \n. Selbst ein Unterschied von einem Zeichen markiert jede Zeile. Behebe durch Aktivieren von Leerzeichen ignorieren, oder normalisiere mit dos2unix / deinen Editor-Einstellungen.
  • Nachgestellte Leerzeichen. "foo " und "foo" unterscheiden sich, wenn Leerzeichen nicht ignoriert werden. Ein Speichern einer Konfigdatei, das nachgestellte Leerzeichen entfernt, lässt jede berührte Zeile geändert aussehen.
  • Tabs vs Leerzeichen. Eine Neuformatierung, die Tabs gegen Leerzeichen tauscht (oder umgekehrt), lässt jede eingerückte Zeile im exakten Übereinstimmungsmodus anders aussehen. Schalte Leerzeichen ignorieren um oder formatiere zuerst beide Seiten identisch.
  • Byte-order mark (BOM). Als UTF-8 mit BOM gespeicherte Dateien beginnen mit einem unsichtbaren . Diese erste "Zeile" wird immer geändert aussehen, wenn sie gegen eine BOM-lose Datei geprüft wird. Entferne das BOM in deinem Editor oder einem Hex-Editor vor dem Einfügen.
  • Typografische Anführungszeichen oder geschützte Leerzeichen. Einfügen aus einem Textverarbeitungsprogramm kann " gegen " oder ein normales Leerzeichen gegen ein geschütztes Leerzeichen tauschen. Sie sehen identisch aus, sind aber unterschiedliche Codepunkte. Normalisiere den Text auf reines ASCII vor dem Diff.
  • Nur Unterschiede in der Groß-/Kleinschreibung. API und api sind unterschiedliche Strings, es sei denn, du schaltest Groß-/Kleinschreibung ignorieren ein. Die zugrunde liegenden Übereinstimmungen zeigen immer noch den Originaltext; nur der Vergleich wird gelockert.
Häufig gestellte Fragen

Was ist der Unterschied zwischen Zeilen- und Wortmodus?

Der Zeilenmodus vergleicht Text eine Zeile nach der anderen — wenn irgendein Zeichen in einer Zeile geändert wird, wird die ganze Zeile als aus A entfernt und in B hinzugefügt markiert. Der Wortmodus teilt an Leerzeichen und zeigt ein granulareres Diff, was besser für Prosa ist. Für Quellcode und Konfigdateien ist der Zeilenmodus fast immer, was du willst.

Warum erscheinen identisch aussehende Zeilen als geändert?

Normalerweise einer von drei unsichtbaren Unterschieden: Zeilenenden (CRLF unter Windows vs LF unter Unix), nachgestellte Leerzeichen oder eine byte-order mark (BOM) am Anfang der Datei. Schalte "Leerzeichen ignorieren" ein, um die ersten beiden zu überspringen. Für BOMs öffne die Datei in einem Hex-Editor oder entferne die führenden Bytes vor dem Einfügen.

Differenziert es zeichenweise?

Nein. Im Zeilenmodus differenziert es pro Zeile; im Wortmodus differenziert es pro durch Leerzeichen getrenntem Token. Diffs auf Zeichenebene erzeugen für die meisten echten Texte rauschende Ausgabe. Wenn du einen Vergleich auf Zeichenebene für kurze Strings brauchst, füge sie im Wortmodus ein — jedes Zeichen wird effektiv sein eigenes Token sein, wenn keine Leerzeichen vorhanden sind.

Wie groß können die Eingaben sein?

Der Diff läuft im Speicher, also ist die praktische Obergrenze der RAM deines Browsers. Bis zu ein paar MB pro Seite funktioniert gut; Dutzende MB können den Tab kurz einfrieren, weil das Rendern des hervorgehobenen HTML langsamer ist als das Diff selbst. Für sehr große Dateien führe Diff lokal mit GNU diff oder git diff aus.

Kann ich Groß-/Kleinschreibung oder Leerzeichen ignorieren?

Ja — beides sind Schalter in der Werkzeugleiste. "Leerzeichen ignorieren" behandelt jede Folge von Leerzeichen als gleichwertig, was praktisch für neuformatierten Code ist. "Groß-/Kleinschreibung ignorieren" behandelt "Hello" und "hello" als gleich. Die zugrunde liegenden Übereinstimmungen zeigen immer noch den Originaltext; nur der Vergleich wird gelockert.

Speichert ihr den Text, den ich in die zwei Boxen einfüge?

Nein. Wir behalten nichts, was du hier einfügst — weder den "vorher"-Text noch den "nachher"-Text. Was immer du vergleichst, wird verworfen, sobald du die Seite schließt oder aktualisierst. Keine Logs, keine Analyse deines Inhalts. Wenn du zusätzliche Sicherheit willst, zeigen dir die developer tools deines Browsers, was vor sich geht.