Aus Linux-Magazin 09/2009

Vier Tools zum Vergleich von Textdateien

© Klaus Eppele, Fotolia.com

Textdateien oder Verzeichnisinhalte miteinander vergleichen, die Unterschiede übersichtlich anzeigen, Funktionen zum automatischen oder manuellen Abgleich oder Zusammenführen – das alles und noch viel mehr bieten diverse Diff-Tools .

Entwickler, die gemeinsam an einem Projekt arbeiten, Admins bei der Wartung von Konfigurationsdateien und Redakteure von Linux-Zeitschriften, fast alle, die mit Text in irgendeiner Form zu tun haben, stehen über kurz oder lang immer vor dem Problem, zwei oder sogar mehrere Dateien miteinander vergleichen zu müssen. Manchmal sind es gar ganze Verzeichnishierarchien, die Gemeinsamkeiten und Unterschiede enthalten. Wer mühsam von Hand vergleicht, verbringt nicht nur viel Zeit mit dieser Aufgabe, sondern macht auch Fehler und übersieht Details. Verschiedene Diff-Programme, ob auf der Shell oder grafisch, helfen schnell und zuverlässig bei dieser Aufgabe.

Schnell auf der Shell

Die Klassiker Diffutils ([1], [2]) enthalten Kommandozeilentools zum Vergleichen von Textdateien. Mit im Paket sind Diff (vergleicht zwei Textdateien), Diff3 (gibt die Unterschiede zwischen drei Dateien aus), Sdiff (führt zwei Textdateien interaktiv zusammen) und Cmp (vergleicht binäre Dateien).

Etliche Aufrufoptionen beeinflussen die Arbeit von Diff: So bietet »-c« mehr Kontext, um die Ausgabe besser lesbar zu machen, und »-y« präsentiert beide Vergleichskandidaten nebeneinander statt untereinander im Terminal. Interessant sind auch die Parameter, die den Leerraum beeinflussen: Leere Zeilen ignoriert Diff über »-B«, Tabulatoren mit »-E«, einfache Leerzeichen mit »-b« und sämtliche Leerzeichen mit »-w«. Diff vergleicht darüber hinaus ganze Verzeichnisstrukturen und schließt auf Wunsch bestimmte Dateien vom Vergleich aus.

Hat Diff erst einmal die Unterschiede herausgefunden, stellt sich die Frage, wie es weitergeht. Das Ergebnis der Vergleichsanalyse präsentieren optional Pager oder Texteditoren; ein manueller Abgleich längerer Texte ist jedoch äußerst mühsam. Hier kommt das Kommando »patch« ins Spiel: Hat der Anwender eine Diff-Ausgabe im so genannten Unified Format (Option »-u« oder »-U Zeilenanzahl«) erstellt, bringt »patch« den Flicken an. Entwickler freier Software wissen diese Technik seit Jahren zu schätzen, da sie Beiträge von Anwendern ohne Schreibzugriff auf die Versionsverwaltung des Projekts auf diese Weise problemlos einpflegen können.

Zahlreiche grafische Diff-Programme, darunter Frontends der Diffutils und eigenständige Implementierungen, stehen als Alternativen zu den Shelltools bereit. Alle Testkandidaten bestechen vor allem durch ihr Syntax-Highlighting und die übersichtliche Darstellung der Unterschiede und Gemeinsamkeiten. Einige haben zusätzliche interessante Features im Gepäck.

Kompare

Das KDE-Tool Kompare [3] setzt im Hintergrund auf die Diffutils, und so verwundert die Featureliste des Diff-Frontends nicht: Kompare vergleicht zwei Textdateien miteinander, schaut rekursiv in Verzeichnisse herein, zeigt mit Diff erstellte oder selbst gemachte Patches an und wendet diese Flicken auf Wunsch auch an.

Der Anwender gibt beim Start entweder die Vergleichskandidaten an oder wählt die beiden Dateien in einem Dialog aus. Der Weg über das Dialogfenster ist flexibler: Außer der Kodierung legt der Anwender hier direkt die farbliche Gestaltung und verschiedene Diff-Optionen fest. Dazu gehören neben dem Ausgabeformat (Kontext, normal oder Unified) auch die Einstellungen zum Leerraum und zum Ausschluss bestimmter Dateien. Alle hier getroffenen Entscheidungen revidiert der Benutzer im Zweifelsfall über das Menü »Einstellungen«.

Seite an Seite präsentiert Kompare die beiden Textdateien anschließend im Hauptfenster. Alle Unterschiede sind farblich hervorgehoben und leicht zu entdecken. Das GUI bietet verschiedene Möglichkeiten zur Navigation in den Änderungen: Über die Werkzeugleiste, über einen Klick mit der Maus auf den Farbbalken oder über Tastenkombinationen. Der Anwender übernimmt entweder gezielt einzelne Änderungen oder bestätigt im Rundumschlag alle Änderungen. Einzelne oder gleich alle Schritte lassen sich rückgängig machen.

Besonders praktisch ist die Funktion, Quelle (linke Fensterhälfte) und Zieldatei (rechter Bereich) zu vertauschen – stellt der Anwender nach dem ersten prüfenden Blick fest, dass er Anpassungen an der jeweils anderen Datei vornehmen möchte, muss er das Programm nicht neu starten und die beiden Vergleichskandidaten nicht neu einlesen.

Flickwerk

Kompare ermöglicht es nicht nur, Änderungen anzuwenden und die neue Datei abzuspeichern, das Programm legt die gefundenen Unterschiede optional auch als separate Diff-Datei ab. Wählt der Anwender den entsprechenden Menü-Eintrag aus, öffnet sich ein Dialog, der zahlreiche Optionen zur Patch-Erstellung bietet (siehe Abbildung 1); in der Voreinstellung ist das Unified-Format ausgewählt. Mit Kompare erstellte Patches sind kompatibel zu Patchdateien des Kommandozeilentools Diff, da das KDE-Programm die Diffutils im Hintergrund verwendet. Eine mit Kompare erstellte Diff-Datei lässt sich daher direkt auf der Shell mit »patch« weiterverarbeiten. Alternativ öffnet der Benutzer diese Diff-Datei wiederum mit Kompare und arbeitet die Änderungen mit dem KDE-Tool ein.

Leider legt Kompare keine automatischen Sicherungskopien an. Beim Abspeichern ist daher Vorsicht geboten, da keine Möglichkeit besteht, das Ziel unter einem neuen Namen abzulegen. Der Anwender sollte sich daher selbst um Backups kümmern oder mit Kopien der Dateien arbeiten. Auch eine Merge-Funktion fehlt – gilt es, zwei oder mehr Dateien zusammenzuführen, bieten sich Kdiff3 oder Meld an.

Abbildung 1: Der Dialog zur Auswahl der Diff-Optionen erlaubt das Feintuning von Kompare. Am unteren Fensterrand erscheinen die Parameter des Shellbefehls zum Vergleich.

Abbildung 1: Der Dialog zur Auswahl der Diff-Optionen erlaubt das Feintuning von Kompare. Am unteren Fensterrand erscheinen die Parameter des Shellbefehls zum Vergleich.

Kdiff3

Kdiff3 [4] vergleicht zwei oder drei Dateien und Verzeichnisse. Das KDE-Programm beherrscht auch das automatische Zusammenführen von Dateien (Merging) und enthält einen eingebauten Editor, der beim Auflösen eventueller Konflikte hilft. Ein besonderes Feature ist die Netzwerktransparenz mit Hilfe von KIO-Slaves. Kdiff3 liest Dateien und Ordner auf lokalen oder entfernten Rechnern ein; das Programm beherrscht unter anderem HTTP, FTP, SFTP, SMB.

Nach dem Programmstart wählt der Anwender zwei oder drei Dateien beziehungsweise Verzeichnisse in einem Dialog aus, sofern er diese nicht beim Aufruf angegeben hat. Optional passt der Benutzer Look & Feel und die Editor- und Diff-Funktionen an, wählt die Kodierung aus und richtet ein, wie Kdiff3 sich beim Zusammenführen verhält. In der Abteilung »Diff« des Einrichtungsdialogs sorgen die beiden Optionen »Zahlen ignorieren« und »C/C++-Kommentare ignorieren« dafür, dass Kdiff3 Änderungen in Zahlen oder Kommentaren wie Leerräume behandelt. Zurzeit unterstützt Kdiff3 nur C/C++-Kommentare.

Kdiff3 präsentiert in der Voreinstellung die Dateien nebeneinander; über das Menü »Fenster« wählt der Anwender optional eine horizontale Darstellung. Links neben den jeweiligen Dateien zeigen Farbbalken die unterschiedlichen Passagen an.

Über das Menü »Navigation«, die Symbole in der Werkzeugleiste oder Tastenkombinationen geht es zu den Unterschieden. Nicht ganz offensichtlich ist die Funktion zum tatsächlichen Abgleichen: Erst nach der expliziten Auswahl von »Aktuelle Datei zusammenführen« bietet Kdiff3 die entsprechenden Menü-Einträge oder aktive Schaltflächen »Zeile(n) von A/B/C wählen«. Dann öffnet sich im unteren Programmbereich das Ergebnisfenster, in dem der Anwender die Konflikte auflöst und optional den Ergebnistext bearbeitet (siehe Abbildung 2).

Abbildung 2: Das Ergebnisfenster von Kdiff3 zeigt nicht nur den fertigen Text, sondern auch die ungelösten Konflikte. Praktisch ist die Möglichkeit, hier manuell Text hinzuzufügen oder zu löschen.

Abbildung 2: Das Ergebnisfenster von Kdiff3 zeigt nicht nur den fertigen Text, sondern auch die ungelösten Konflikte. Praktisch ist die Möglichkeit, hier manuell Text hinzuzufügen oder zu löschen.

Die Schaltflächen und Menü-Einträge zum Speichern sind so lange inaktiv, bis alle Konflikte aufgelöst sind. Kdiff3 erleichtert dem Anwender die Arbeit, indem das Programm anbietet, für alle Konflikte eine Datei zur Grundlage zu erklären. Die gleiche Möglichkeit gibt es auch für die noch verbleibenden ungelösten Konflikte in “weißen” Zeichen. Um für jeden Unterschied eine neue Entscheidung zu treffen, kann der Anwender alle Unterschiede zu Konflikten erklären. Zurück zur automatischen Auswahl geht es über die Funktion »Einfache Konflikte automatisch lösen«.

Beim Vergleich von zwei Textdateien ist jeder Unterschied gleichzeitig auch ein Konflikt, den es zu lösen gilt. Bei drei Dateien verwendet Kdiff3 die erste Datei als Basis, die zweite und dritte Datei enthalten die Änderungen. Wurde eine Zeile nur in Datei B oder C geändert, aber nicht in beiden, wählt Kdiff3 automatisch die richtige Änderung aus. So nimmt das Programm dem Anwender einfache Entscheidungen ab, ermöglicht aber nach wie vor manuelles Eingreifen.

Kdiff3 legt in der Voreinstellung Sicherungskopien mit der Endung ».orig« ab; wenn ein solches Backup bereits existiert, überschreibt das Programm es ohne Nachfrage.

Xxdiff

Xxdiff [5] ist ebenfalls ein grafisches Frontend für die Shellprogramme Diff und Diff3. Daher kann Xxdiff zwei oder drei Dateien beziehungsweise zwei Verzeichnisse miteinander vergleichen. Einer der größten Nachteile dieses Programms sei gleich vorweggenommen: Xxdiff bietet keine Unicode-Unterstützung. Nahezu alle aktuellen Linux-Distributionen verwenden in der Voreinstellung allerdings UTF-8, und so bleibt dem Anwender oft nur der Griff zu einem Konvertierungstool wie Iconv oder Recode.

Optionsvielfalt

Das Programm erwartet beim Start mindestens zwei oder drei Dateinamen und präsentiert diese dann in einem zwei- oder dreigeteilten Fenster mit farblich hervorgehobenen Unterschieden. Zahlreiche Aufrufparameter, darunter die bekannten Diff-Optionen, beeinflussen das Programmverhalten beim Start. Ein Blick ins Handbuch listet alle Parameter auf. Eine gezielte Auswahl von Diff-Optionen ist außerdem über das Menü »Options« möglich. Genau wie Kompare blendet Xxdiff nach dem Aktivieren der jeweiligen Checkboxen das vollständige Diff-Kommando ein. Nach dem Bestätigen führt das Programm den gewählten Diff-Befehl neu aus.

Die beiden Menüs »Edit« und »View« bieten ein paar Funktionen zum Suchen und zur Navigation. Möglichkeiten zum Auswählen ganzer Dateien oder einzelner Zeilen als Vorbereitung zum Zusammenführen enthalten hingegen die Menüs »Global«, »Region« und »Line«.

Xxdiff erlaubt das Speichern einzelner oder zusammengeführter Dateien. Über das Menü »File« liest Xxdiff einen oder beide Vergleichskandidaten erneut ein (»Replace left/right file«), führt das Diff-Kommando noch einmal aus oder bearbeitet die Dateien im Texteditor. Wählt der Anwender Letzteres, startet ein Xterm mit der Datei im Vi.

Zum Zusammenführen von Dateien stehen zwei Optionen zur Verfügung: Der Eintrag »Merge« aus dem Menü »Global« führt die Dateien lediglich am Bildschirm zusammen. Um das Ergebnis einzublenden, wählt der Anwender aus dem Menü »Windows« den Eintrag »Toggle pane merged view«. Xxdiff zeigt anschließend das Ergebnis im oberen Fensterbereich an (siehe Abbildung 3). Alternativ speichert das Programm die zusammengeführte Datei (»Save as merged«). Der zugehörige Dialog bietet einige Optionen, um Konflikte in der Ergebnisdatei entsprechend darzustellen.

Abbildung 3: Im oberen Fensterbereich zeigt Xxdiff das Ergebnis der »Merge«-Operation. Leider bietet das Programm als einziger Testkandidat keine Möglichkeit, den Zeichensatz einzustellen.

Abbildung 3: Im oberen Fensterbereich zeigt Xxdiff das Ergebnis der »Merge«-Operation. Leider bietet das Programm als einziger Testkandidat keine Möglichkeit, den Zeichensatz einzustellen.

Wem das Programm auf den ersten Blick zu spartanisch erscheint, der sollte sich die Dokumentation zu den Helper Scripts auf der Projekt-Homepage anschauen. Diese Erweiterungen bieten einige Distributionen als eigenes Paket an. Alle anderen Benutzer finden im Abschnitt »Download« auf der Webseite Hinweise zur Installation aus den Quellen.

Meld

Das Gnome-Programm Meld [6] wurde ursprünglich zum Vergleich von CVS-Verzeichnissen entwickelt, bietet aber auch Unterstützung für andere Versionskontroll-Systeme (Git, Subversion, Bazaar und andere). Darüber hinaus vergleicht Meld zwei oder drei Dateien beziehungsweise zwei oder drei Verzeichnisse miteinander.

Die Oberfläche ist äußerst übersichtlich, auch Einsteiger dürften sich hier schnell zurechtfinden. Neben der farblichen Hervorhebung von Unterschieden fällt vor allem das Tabbing-Feature positiv auf: Meld ordnet mehrere Vergleichsoperationen in Reitern nebeneinander an. Klickt der Anwender auf »Neu«, startet ein Dialogfenster mit den drei Optionen »Dateivergleich«, »Verzeichnisvergleich« und »Version Control Browser«.

Als besonders komfortabel erweisen sich die Undo-/Redo-Funktion und die Pfeile neben den gefundenen Änderungen, mit denen Text von links nach rechts und andersrum wandert. Hält der Anwender die [Strg]-Taste gedrückt, verwandelt sich das Pfeilsymbol und zeigt nun zwei Pfeile nach oben und nach unten. Ein Klick auf einen davon fügt den Text in der anderen Datei über oder unter dem hervorgehobenen Abschnitt ein.

Einige Meld-Optionen (»Patch erstellen«, »Bearbeiten«, »Copy All To Left« oder »Copy All To Right«) sind nur über das Kontextmenü der rechten Maustaste erreichbar – besonders intuitiv ist das nicht. Kollegial zeigt sich das Programm jedoch, wenn es um Patches geht: Mit Meld erstellte Patches liegen im Unified-Diff-Format vor, sodass Benutzer anderer Diff-Programme diese problemlos weiterverwenden können. Zur Bearbeitung von Texten bietet Meld einen eigenen, internen Editor an. Über den Einrichtungsdialog ist es aber problemlos möglich, ein anderes Programm zu diesen Aufgaben heranzuziehen.

Für den Verzeichnisvergleich richtet der Anwender über den Einrichtungsdialog verschiedene Filter ein. Neben einigen vordefinierten Filtern, die sich problemlos an- und abschalten lassen, hilft Meld dabei, neue Funktionen einzubinden. Auf Wunsch klammert das Programm Symlinks ganz aus (siehe Abbildung 4). Ein Doppelklick auf eine Datei, die Meld beim Verzeichnisvergleich rot (und damit als “unterscheidet sich”) markiert, startet automatisch einen Dateivergleich in einem neuen Reiter.

Abbildung 4: Meld erlaubt das Erstellen vieler verschiedener Filter für den Vergleich von Verzeichnissen. Filter für den Dateivergleich richtet der Anwender analog über den Dialog »Textfilter« ein.

Abbildung 4: Meld erlaubt das Erstellen vieler verschiedener Filter für den Vergleich von Verzeichnissen. Filter für den Dateivergleich richtet der Anwender analog über den Dialog »Textfilter« ein.

Das Programm bietet verschiedene Optionen zum Speichern, erstellt allerdings keine automatischen Sicherungskopien. Des Weiteren wäre es schön, alle und nicht nur einige Funktionen über Tastatur-Shortcuts erreichen zu können – ohne Maus ist Meld nicht zu bedienen.

Fazit

Auch eingefleischte Shell-Fans dürften in den grafischen Diff-Programmen Funktionen und Features entdecken, die die Kommandozeilentools Diff, Patch & Co. nicht oder nicht so komfortabel bieten. Einige der vorgestellten GUIs verwenden die Diffutils im Hintergrund, andere bieten eigene Funktionen oder greifen optional auf alternative Programme zurück. Manche Diffutils-Frontends eignen sich besonders gut zum unkomplizierten Austausch von Patches mit Benutzern, die die Arbeit auf der Kommandozeile bevorzugen.

Wirklich angenehm im Austausch und Verarbeiten von Patches zeigt sich Kompare. Dafür kann das KDE-Programm nicht punkten, wenn es um das Zusammenführen von Dateien geht, und um Backups muss sich der Anwender auch selbst kümmern. Kdiff3 löst dieses Problem und besticht vor allem durch die Integration der KIO-Slaves und seine Netzwerktransparenz. Auch das automatische Zusammenführen und Lösen von Konflikten überzeugen. Dafür verlangt Kdiff3 ein bisschen mehr Einarbeitungszeit – ein ausführliches Studium des mitgelieferten Handbuchs lohnt sich.

Mit guter Dokumentation besticht auch Xxdiff. Laut Handbuch besitzt das Tool eine unglaubliche Optionsvielfalt und bietet viele versteckte Features – manchmal zu gut versteckt. Die Beschriftung der Menü-Einträge und die Vorgehensweise beim Übernehmen der Änderungen und beim Zusammenführen sind darüber hinaus nicht besonders intuitiv. Die auf der Projekt-Webseite beschriebenen Tipps & Tricks und die Erweiterungsskripte zeigen allerdings, dass hier einige Schätze im Verborgenen schlummern.

Den besten Eindruck hinterlässt die Gnome-Anwendung Meld, auch wenn ein paar zusätzliche Tastenkombinationen und ein bisschen weniger Mausarbeit angenehm wären. Die Möglichkeit, einen eigenen Texteditor für die manuelle Nacharbeit der Dateien zu definieren, und die Zusammenarbeit mit zahlreichen Versionskontroll-Systemen gefallen hier besonders gut.

Infos

[1] GNU Diffutils: [http://www.gnu.org/software/diffutils]

[2] Andreas Romeyke, “Der feine Unterschied – Algorithmen hinter Diff”: Linux-Magazin 01/2007, S. 106: [https://www.linux-magazin.de/Heft-Abo/Ausgaben/2007/01/Der-feine-Unterschied]

[3] Kompare: [http://www.caffeinated.me.uk/kompare]

[4] Kdiff3: [http://kdiff3.sourceforge.net]

[5] Xxdiff: [http://furius.ca/xxdiff]

[6] Meld: [http://meld.sourceforge.net]

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben