Diff

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

diff ist ein Unix-Programm, das synoptisch die Unterschiede zwischen zwei Textdateien zeilen- bzw. abschnittweise einander gegenüberstellt.

Inhaltsverzeichnis

Grundlagen

Diff ist eine grundlegende Kommandozeilenfunktion eines Unixsystems. Eine weite Palette von Computerprogrammen machen sich dies zunutze. Die Ausgabe des Programms geschieht in Textform und wird oft ebenfalls als diff bezeichnet (Dateiendung .diff). Das Ausgabeformat ermöglicht eine maschinelle Verarbeitung.

Anwendungen in der Versionsverwaltung sind vielfältig: So kann die Ausgabe von diff zum Beispiel als Eingabe für das Unix-Programm patch verwendet werden, um die Änderungen, die diff festgestellt hat, an einer anderen Textdatei auszuführen. Zudem gibt es eine Reihe von Programmen, welche die von diff ausgegebenen Unterschiede in übersichtlicher graphischer Form darstellen. Außerdem bildet diff die Grundlage aller Merge-Funktionen.

Programmfunktion

Die ersten Versionen des Programms wurden programmiert, um Textdateien zu vergleichen. Seit 1980 unterstützt diff aber auch Binärdateien.

Aufruf

Diff wird auf der Kommandozeile mit den Namen von zwei Textdateien als Parameter ausgeführt:

$ diff beispiel1.txt beispiel2.txt

Die beiden Textdateien werden zeilenweise verglichen, das heißt, auch wenn sich eine Zeile in den beiden Dateien nur in einem einzelnen Zeichen unterscheidet, interpretiert diff das als eine gelöschte und eine neu eingefügte Zeile.

Ausgabe

Die Ausgabe von diff kann beispielsweise folgendermaßen aussehen:

--- beispiel1.txt       2008-03-27 12:47:59.000000000 +0100
+++ beispiel2.txt       2008-03-27 12:48:11.000000000 +0100
@@ -1,3 +1,3 @@
-Zeile eins
 Zeile zwei
 Zeile drei
+Zeile vier

Die beiden Dateien, die diff für dieses Beispiel übergeben wurden, sind:

beispiel1.txt:
Zeile eins
Zeile zwei
Zeile drei
beispiel2.txt:
Zeile zwei
Zeile drei
Zeile vier

Es gibt verschiedene Ausgabeformate. Das obige Beispiel folgt dem sogenannten vereinheitlichten Format (unified diff). Dabei wird jede Zeile, die nur in der ersten Datei vorkommt, mit einem Minuszeichen gekennzeichnet, und jede Zeile, die nur in der zweiten Datei vorkommt, mit einem Pluszeichen. Den beiden Dateien gemeinsame Zeilen werden durch ein Leerzeichen gekennzeichnet.

Gewöhnlich werden dabei nicht alle Zeilen ausgegeben, sondern nur Blöcke von Zeilen, die sich in der Nähe eines Unterschiedes befinden. Am Anfang der Ausgabe stehen zwei Zeilen, die mit drei Pluszeichen respektive drei Minuszeichen gekennzeichnet werden. Sie zeigen die Dateien, auf die sich das diff bezieht. Die Blöcke werden mit einer Zeile eingeleitet, die von At-Zeichen (@) umgeben sind. Diese zeigen an, wo sich der entsprechende Block in beiden Dateien befindet.

Geschichte

Das diff-Programm wurde in den frühen 1970er Jahren auf dem Unix-Betriebssystem von AT&T Bell Labs in Murray Hill, New Jersey, USA entwickelt. Die endgültige Version, die zu diesem sehr frühen Unix-System gehörte, wurde vollständig von Douglas McIlroy geschrieben. Diese Untersuchungen wurden 1976 in einem Dokument veröffentlicht, das von James W. Hunt mitverfasst wurde, welcher auch eine der anfänglichen Versionen von diff schrieb.

McIlroys Arbeit wurde beeinflusst von Steve Johnsons Vergleichs-Programm auf GECOS und Mike Lesks proof-Programm, welches wie diff auch auf Unix entstanden ist. Proof produzierte Zeile-für-Zeile-Änderungen wie diff und verwendete dafür spitze Klammern (">" und "<"), um Zeilen-Einfügungen und Zeilen-Entfernungen in der Ausgabe des Programms darzustellen. Die heuristische Methode, die diese Programme verwendeten, galt als unzuverlässig. Die potentielle Brauchbarkeit eines diff-Tools inspirierte McIlroy, ein neues, robusteres Programm zu entwickeln, welches viele Anwendungsmöglichkeiten hatte, aber trotzdem eine gute Performance in den Prozessor- und Speicher-Limits der PDP-11-Hardware lieferte. Sein Erfolg war ein Ergebnis der Zusammenarbeit mit den Leuten von Bell Labs, inklusive Alfred V. Aho, Elliot Pinson, Jeffrey Ullman und Harold S. Stone.

Freie Softwareimplementierungen

Das grafische diff-Werkzeug Kompare
Das grafische diff-Werkzeug Kompare
Das grafische diff-Werkzeug WinMerge
Das grafische diff-Werkzeug WinMerge

Das GNU-Projekt stellt eine Implementierung von diff (und diff3) im Paket zur Verfügung.

Etliche Tools, die auf verschiedenen Plattformen laufen, basieren auf der diffutils-Engine des GNU-Projektes und stellen ein graphisches Frontend für die selben Informationen dar. Einige dieser Programme können Dateien auch bearbeiten und zusammenführen.

Siehe auch

Literaturnachweis

  • Hunt, James W. und McIlroy, M. Douglas, "An Algorithm for Differential File Comparison," 41, Computing Science Technical Report, Bell Laboratories, June 1976.
  • "Comparing and Merging Files with GNU Diff and Patch", von David MacKenzie, Paul Eggert, und Richard Stallman (ISBN 0-9541617-5-0)
  • E. Myers, "An O(ND) Difference Algorithm and Its Variations," Algorithmica 1, 2 (1986), 251-266.

Weblinks

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net