diff

diff

diff ist ein Unix-Programm, das 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 telefonliste2007.txt telefonliste2008.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

Folgende beiden Dateien werden mit diff verglichen.

telefonliste2007.txt:
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmidt, Eberhard, Vertrieb, -479
Schmitt, Marie, Labor, -804
telefonliste2008.txt:
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmitt, Marie, Labor, -804
Waldmann, Ernst, Labor, -805
Zundel, Walter, Vertrieb, -476

Die Ausgabe von diff sieht dann so aus:

3d2
< Schmidt, Eberhard, Vertrieb, -479
4a4,5
> Waldmann, Ernst, Labor, -805
> Zundel, Walter, Vertrieb, -476

Es gibt verschiedene Ausgabeformate. Das obige Beispiel entspricht der Normal-Ausgabe (normal diff) ohne weitere Optionen. Die Zeilen, die mit einer spitzen, öffnenden Klammer beginnen, sind nur in der ersten Datei vorhanden, diejenigen, die mit einer spitzen, schließenden Klammer beginnen, sind nur in der zweiten Datei vorhanden. Zeilen, die in beiden Dateien gleich sind, werden nicht ausgegeben. Die einzelnen Blöcke werden durch so genannte change commands („Änderungsbefehle“) getrennt, die angeben, welche Aktion (Zeilen hinzufügen, ändern oder entfernen) in welchen Zeilen ausgeführt werden soll.[1]

Das so genannte vereinheitlichte Format (unified diff) erhält man durch die Option -u. 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 und, durch ein Komma getrennt, wie lang er in der jeweiligen Datei ist.


Im obigen Beispiel ergibt sich im unified-diff-Format

--- telefonliste2007.txt        2007-12-28 13:12:34.000000000 +0100
+++ telefonliste2008.txt        2008-07-28 14:16:26.000000000 +0100
@@ -1,4 +1,5 @@
 Mayer, Susanne, Lager, -212
 Schmid, Carola, Geschäftsleitung, -435
-Schmidt, Eberhard, Vertrieb, -479
 Schmitt, Marie, Labor, -804
+Waldmann, Ernst, Labor, -805
+Zundel, Walter, Vertrieb, -476

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 GNU-Projekt stellt eine Implementierung von diff (und diff3, welches drei Dateien vergleicht) 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 dieselben Informationen dar. Einige dieser Programme können Dateien auch bearbeiten und zusammenführen.

Verwandte Themen

  • Kompare - eine grafische Oberfläche für diff
  • meld - sehr umfassende grafische Oberfläche für diff
  • WinMerge - ein Open-Source-Diff für Windows
  • patch - das Gegenstück zu diff, mit dem Dateien anhand ihrer Unterschiede rekonstruiert werden.
  • Delta-Kodierung - ein Datenkompressionsverfahren, bei dem bei ähnlichen Dateien nur die Unterschiede zur Ausgangsdatei gespeichert werden, beispielsweise bei Versionsverwaltungen.

Literatur

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

Einzelnachweise

  1. Comparing and Merging Files – Detailed Description of Normal Format. In: GNU Diffutils Manual. Abgerufen am 17. Februar 2009.

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Diff — ist ein Unix Programm, das synoptisch die Unterschiede zwischen zwei Textdateien zeilen bzw. abschnittweise einander gegenüberstellt. Inhaltsverzeichnis 1 Grundlagen 2 Programmfunktion 2.1 Aufruf 2.2 Ausgabe 3 Gesch …   Deutsch Wikipedia

  • Diff — Saltar a navegación, búsqueda En informática, diff es una utilidad para la comparación de archivos que genera las diferencias entre dos archivos o los cambios realizados en un archivo determinado comparándolo con una versión anterior del mismo… …   Wikipedia Español

  • Diff — В вычислительной технике diff  утилита сравнения файлов, выводящая разницу между двумя файлами. Эта программа выводит построчно изменения, сделанные в файле (для текстовых файлов). Современные реализации поддерживают также двоичные файлы.… …   Википедия

  • diff — est une commande Unix qui permet de comparer deux fichiers et d en afficher les différences. La première version de diff a été livrée avec la 5e édition d Unix en 1974, elle avait été écrite par Douglas McIlroy. L article de recherche a été… …   Wikipédia en Français

  • Diff — est une commande Unix qui permet de comparer deux fichiers et d en afficher les différences. La première version de diff a été livrée avec la 5e édition d Unix en 1974, elle avait été écrite par Douglas McIlroy. L article de recherche a été… …   Wikipédia en Français

  • diff — or dif [dif] n. [Slang] short for DIFFERENCE [what s the diff?] * * * diff (dĭf) n. Informal Difference: “[His] flaw... starts with a fleshy calculation, an instinct to blunt disagreeme …   Universalium

  • DIFF — may refer to: diff, a file comparison utility Dominican International Film Festival Dubai International Film Festival This disambiguation page lists articles associated with the same title. If an …   Wikipedia

  • diff — or dif [dif] n. [Slang] short for DIFFERENCE [what s the diff?] …   English World dictionary

  • Diff — In computing, diff is a file comparison utility that outputs the differences between two files, or the changes made to a current file by comparing it to a former version of the same file. Diff displays the changes made per line for text files.… …   Wikipedia

  • diff — This article is about the file comparison utility. For other uses, see DIFF (disambiguation). Diffs redirects here. For the American punk rock group, see The Diffs. In computing, diff is a file comparison utility that outputs the differences… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”