Diff Checker
Diff Checker
Vergleiche zwei Texte und finde Unterschiede Zeile für Zeile. Mit Side-by-Side-Ansicht, Unified-View und Highlighting von Hinzugefügten und Entfernten.
Hinweis: Alle Vergleiche erfolgen lokal in deinem Browser. Es werden keine Daten an Server gesendet. Perfekt für vertrauliche Texte, Code-Snippets oder Konfigurationsdateien.
Inhaltsverzeichnis
Schnellübersicht
- Text-Vergleich: Zwei Texte Zeile für Zeile vergleichen
- Side-by-Side: Nebeneinander-Ansicht mit Zeilennummern
- Unified-View: Klassische Diff-Darstellung
- Highlighting: Hinzugefügt, Entfernt, Geändert
- Statistik: Anzahl der Änderungen auf einen Blick
- Presets: Beispiele für Code, JSON, Text
- Theorie: Über Diff-Algorithmen (LCS)
- Geschichte: Von Unix diff zu GitHub
1. Diff Checker
Füge zwei Texte ein und klicke auf "Vergleichen" – die Unterschiede werden hervorgehoben.
Wussten Sie schon? Der erste diff-Algorithmus wurde 1974 von Douglas McIlroy bei Bell Labs entwickelt. Er basiert auf dem Longest Common Subsequence (LCS)-Problem und ist bis heute die Grundlage für Git, GitHub, GitLab und alle modernen Versionsverwaltungssysteme. Der Befehl diff ist Teil der POSIX-Standards und auf jedem Unix/Linux-System vorhanden.
2. Theorie – Diff-Algorithmen
Verstehe die Grundlagen von Text-Vergleichen.
Was ist ein Diff?
Ein Diff zeigt die Unterschiede zwischen zwei Versionen:
- Zeilenbasiert: Vergleich Zeile für Zeile
- Hinzugefügt (+): Neue Zeilen
- Entfernt (−): Gelöschte Zeilen
- Unverändert: Gleiche Zeilen
LCS-Algorithmus
Longest Common Subsequence ist die Basis:
- Ziel: Längste gemeinsame Teilfolge finden
- Dynamisch: O(n×m) Speicher
- Optimiert: Myers-Diff O(nd)
- Ergebnis: Minimale Änderungen
Diff-Formate
Verschiedene Darstellungen:
- Unified: GitHub-Standard, kompakt
- Context: Mit Kontext-Zeilen
- Side-by-Side: Nebeneinander
- Word-Diff: Innerhalb Zeilen
Best Practices
- Kleine Commits: Leichter zu reviewen
- Aussagekräftige Messages: Was und warum
- Kontext beachten: Nicht nur Zeilen
- Ignorieren: Whitespace, Case optional
- Tool nutzen: VSCode, Git, Meld
- Code Review: Vor Merge prüfen
3. Geschichte des Diff
Von Unix zu Git und modernen Code-Reviews.
Erster diff-Befehl
Douglas McIlroy entwickelt das diff-Programm bei Bell Labs. Es vergleicht zwei Dateien und zeigt Unterschiede. Erster Meilenstein der Textverarbeitung.
LCS-Algorithmus
Hunt & Szymanski veröffentlichen den LCS-Algorithmus. Er wird zur Grundlage moderner Diff-Werkzeuge. Effiziente Berechnung von Unterschieden.
Myers-Diff
Eugene Myers veröffentlicht optimierten Algorithmus mit O(ND)-Komplexität. Wird Standard für alle modernen Diff-Implementationen.
diff als POSIX
diff wird Teil der POSIX-Standards. Auf jedem Unix-System verfügbar. Werkzeuge wie patch und diffstat entstehen.
Git revolutioniert
Linus Torvalds entwickelt Git. Diff wird zum Kernstück jeder Versionsverwaltung. Distributed Version Control wird Standard.
GitHub & Pull Requests
GitHub startet und macht Diff-Ansichten populär. Pull Requests mit Side-by-Side-Diff werden Standard im Code Review.
Moderne Diff-Tools
Beyond Compare, Meld, KDiff3, WinMerge werden populär. VSCode integriert Diff-Ansicht. Merge-Konflikte leicht lösen.
KI-gestützte Diffs
GitHub Copilot und KI-Tools erklären Diffs automatisch. Semantic Diff versteht Code-Struktur statt nur Zeilen. Review wird effizienter.
4. FAQ – Häufige Fragen
Häufige Fragen zu Diff
Ein Diff-Algorithmus findet die minimale Anzahl an Änderungen zwischen zwei Texten:
- 1. Zerlegung: Beide Texte in Zeilen aufteilen
- 2. LCS finden: Längste gemeinsame Teilfolge berechnen
- 3. Vergleich: Was ist in A, aber nicht in B?
- 4. Ausgabe: Zeilen mit +/− markieren
Beispiel:
- A:
hallo,welt,! - B:
hallo,Welt,! - Diff: Zeile 2 geändert
Moderner Standard: Myers-Diff mit O(ND)-Komplexität.
| Format | Darstellung | Verwendung |
|---|---|---|
| Unified | Untereinander | Git, GitHub, CLI |
| Side-by-Side | Nebeneinander | IDE, GUI-Tools |
| Context | Mit Kontext | Älter, seltener |
Unified-Beispiel:
@@ -1,3 +1,3 @@ hallo -welt +Welt !
Vorteil Unified: Kompakt, ideal für E-Mails und Patches.
Vorteil Side-by-Side: Übersichtlich bei großen Änderungen.
Ja, die meisten Diff-Tools bieten Optionen:
- -w / --ignore-all-space: Alle Whitespaces ignorieren
- -b / --ignore-space-change: Änderungen in Whitespace ignorieren
- -i / --ignore-case: Groß-/Kleinschreibung ignorieren
- -B / --ignore-blank-lines: Leere Zeilen ignorieren
Git-Beispiele:
git diff -w– Whitespace ignorierengit diff --ignore-all-spacegit diff --ignore-blank-lines
Wichtig: In Code ist Whitespace oft signifikant (Python!).
Ein Merge-Konflikt entsteht, wenn zwei Branches dieselbe Zeile ändern:
Beispiel in Git:
<<<<<<< HEAD
console.log("Hallo");
=======
console.log("Hello");
>>>>>>> branch-feature
Lösung:
- Manuell: Eine Version wählen
- Merge-Tool: GUI zum Auflösen
- Strategie: ours/theirs
- Rebase: Bei Feature-Branches
Best Practice: Häufig pullen, kleine Commits.
Ein Hunk (oder Chunk) ist ein zusammenhängender Block von Änderungen:
- Kopfzeile:
@@ -1,3 +1,3 @@ - Format:
@@ -alteStart,alteAnz +neueStart,neueAnz @@ - Kontext: 3 Zeilen vor/nach (Standard)
- Inhalt: Zeilen mit Präfix (+, −, Leerzeichen)
Beispiel:
@@ -5,7 +5,8 @@ context line 1 context line 2 -removed line +added line +another added context line 3
Verwendung: In git add -p kannst du Hunk für Hunk stagen.
Standard-Tools:
| Befehl | Beschreibung |
|---|---|
diff a.txt b.txt | Zeilenvergleich |
diff -u a.txt b.txt | Unified-Format |
diff -y a.txt b.txt | Side-by-Side |
diff -w a.txt b.txt | Whitespace ignorieren |
git diff | Uncommitted changes |
git diff HEAD~1 | Letzter Commit vs. jetzt |
git diff branch1..branch2 | Zwischen Branches |
Farbe aktivieren:
git config --global color.diff autodiff --color=auto a.txt b.txt
| Tool | Plattform | Besonderheit |
|---|---|---|
| Beyond Compare | Win/Mac/Linux | Kommerziell, mächtig |
| Meld | Linux/Windows | Open Source, Git-Integration |
| KDiff3 | Win/Mac/Linux | 3-Wege-Merge |
| WinMerge | Windows | Gratis, einfach |
| VSCode | Alle | Eingebaut, Git-Integration |
| P4Merge | Win/Mac/Linux | Perforce, gratis |
Für Git konfigurieren:
git config --global diff.tool meldgit difftoolstattgit diff
Ein Three-Way-Merge nutzt drei Versionen zum Zusammenführen:
- Base: Gemeinsamer Vorfahre
- Ours: Aktueller Branch
- Theirs: Zu mergender Branch
Vorteil:
- Intelligent: Nutzt Base zum Vergleich
- Weniger Konflikte: Bei unabhängigen Änderungen
- Automatisch: Bei klar getrennten Änderungen
Git-Beispiel:
git checkout main git merge feature # Automatisch oder Konflikt
Zusammenfassung
Die wichtigsten Punkte
- Diff: Zeilenbasierter Vergleich zweier Texte
- LCS: Longest Common Subsequence als Basis
- Myers-Diff: O(ND)-Algorithmus, Standard
- Formate: Unified, Side-by-Side, Context
- Symbole: + hinzugefügt, − entfernt, Leerzeichen unverändert
- Hunk: Zusammenhängender Änderungsblock
- Whitespace: Optional ignorieren (-w)
- Merge-Konflikt: Bei gleicher Zeile in 2 Branches
- Git:
git difffür alle Änderungen - Unser Tool: Diff Checker mit Side-by-Side und Unified View