Zum Inhalt springen

diff

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 5. September 2007 um 14:26 Uhr durch 85.126.245.111 (Diskussion) (jetzt geht die alphabetische reihenfolge sogar nach dem alphabet welches ich kenne ;)). Sie kann sich erheblich von der aktuellen Version unterscheiden.

diff ist ein Unix-Programm, das die Unterschiede zwischen zwei Textdateien synoptisch ausgibt.

Die Ausgabe des Programms wird oft mit demselben Namen wie das Programm selbst als diff bezeichnet. Es wird auf der Kommandozeile mit den Namen von zwei Textdateien als Parameter ausgeführt:

$ diff erstedatei.txt zweitedatei.txt

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

Im vereinheitlichten Format (unified diff) wird jede Zeile, die nur in der ersten Datei vorkommt, mit einem Minuszeichen gekennzeichnet, jede Zeile, die nur in der zweiten Datei vorkommt, wird mit einem Pluszeichen gekennzeichnet. Alle anderen Zeilen werden durch ein Leerzeichen gekennzeichnet.

Zeilen, die mit drei Pluszeichen gekennzeichnet werden, zeigen die Anzahl der Zeilen in jedem Stück, die Dateinamen, und wo in der Datei diese zu finden sind.

Die Ausgabe von diff wird oft als Eingabe für patch verwendet.

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 GNU-Projekt stellt eine Implementierung von diff (und diff3) im Paket diffutils (englisch) zur Verfügung. Dort findet sich auch eine sehr umfangreiche Dokumentation zum Befehl.

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. Diese Liste enthält einige der freien Werkzeuge in alphabetischer Reihenfolge.

  • CSDiff (englisch, Freeware für Windows)
  • DiffDaff (deutsch, Freeware für Windows)
  • KDiff3 (englisch, Open Source für Windows, Linux, Unix, MAC)
  • Kompare (Open Source für Linux)
  • Meld (englisch, Skript für Linux, erfordert gnome und python)
  • tkdiff (englisch, Open Source für Windows und Linux)
  • WinMerge (englisch, Open Source für Windows)
  • xxdiff (englisch, Open Source für Linux/OpenBSD)

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. [1] (englisch)
  • "Comparing and Merging Files with GNU Diff and Patch", von David MacKenzie, Paul Eggert, und Richard Stallman (ISBN 0954161750) [2] (englisch)
  • E. Myers, "An O(ND) Difference Algorithm and Its Variations," Algorithmica 1, 2 (1986), 251-266.
  • Eine gewöhnliche Implementierung des Myers SES/LCS Algorithmus [3] (englisch)