Diff

diff
Originalautor (en) Douglas McIlroy
(AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung Juni 1974; Vor 48 Jahren
Geschrieben in C
Betriebssystem Unix, Unix-artig, V, Plan 9, Inferno
Plattform Plattformübergreifend
Typ Befehl
Lizenz Plan 9: MIT -Lizenz

Im Computer, das Dienstprogramm diff ist ein Datenvergleich Tool, das die Unterschiede zwischen dem Inhalt von Dateien berechnet und zeigt. nicht wie Entfernung bearbeiten Vorstellungen für andere Zwecke, Differ Levenshtein -Entfernung Da es versucht hat, den kleinsten Satz von Löschungen und Einfügungen zu bestimmen, um eine Datei aus der anderen zu erstellen. Das Dienstprogramm zeigt die Änderungen in einem von mehreren Standardformaten an, so dass sowohl Menschen als auch Computer die Änderungen analysieren und für verwenden können Patching.

Typischerweise, diff wird verwendet, um die Änderungen zwischen zwei Versionen derselben Datei anzuzeigen. Moderne Implementierungen unterstützen auch Binärdateien.[1] Der Ausgang wird als "Diff" oder a bezeichnet Patch, da der Ausgang mit dem angewendet werden kann Unix Programm Patch. Die Ausgabe ähnlicher Dateivergleichsversorger wird auch als "Diff" bezeichnet. wie die Verwendung des Wortes "Grep"Für die Beschreibung des Suchakts das Wort diff wurde ein generischer Begriff für die Berechnung der Datendifferenz und deren Ergebnisse.[2] Das Posix Standard gibt das Verhalten der Dienstprogramme "Diff" und "Patch" und deren Dateiformate fest.[3]

Geschichte

Diff wurde in den frühen 1970er Jahren auf dem UNIX -Betriebssystem entwickelt, aus dem hervorging Bell Labs in Murray Hill, New Jersey. Die erste veröffentlichte Version, die 1974 mit der 5. Ausgabe von Unix versandt wurde und von geschrieben wurde von Douglas McIlroy, und James Hunt. Diese Forschung wurde in einem mit James W. Hunt geschriebenen Papier von 1976 veröffentlicht, der einen ersten Prototyp von entwickelte diff.[4] Der Algorithmus, der dieses Papier beschrieben hat Hunt -Szymanski -Algorithmus.

McIlroys Arbeit wurde vorausging und beeinflusst von Steve Johnson's Vergleichsprogramm auf Gecos und Mike Lesk's nachweisen Programm. Nachweisen stammt auch von Unix und, wie diff, produzierte Änderungen von Linien für Linien und sogar verwendete Winkelspuren (">" und "<"), um Linieninsertionen und Löschungen in der Ausgabe des Programms zu präsentieren. Das Heuristik In diesen frühen Anwendungen wurden jedoch als unzuverlässig eingestuft. Die potenzielle Nützlichkeit eines Diff -Tools leitete McIlroy zur Erforschung und Gestaltung eines robuster PDP-11Hardware. Seine Herangehensweise an das Problem resultierte aus der Zusammenarbeit mit Einzelpersonen von Bell Labs, einschließlich Alfred Aho, Elliot Pinson, Jeffrey Ullmanund Harold S. Stone.

Im Kontext von UNIX die Verwendung der ed Zeilenredakteur bereitgestellt diff Mit der natürlichen Fähigkeit, maschinell-nutzbare "Skripte bearbeiten" zu erstellen. Diese Bearbeitungsskripte bearbeiten, wenn sie in einer Datei gespeichert werden, können zusammen mit der Originaldatei nachgewiesen werden ed in die modifizierte Datei in ihrer Gesamtheit. Dies reduzierte die stark Zweitlager notwendig, um mehrere Versionen einer Datei zu verwalten. McIlroy überlegte, einen Postprozessor für zu schreiben diff Wo eine Vielzahl von Ausgangsformaten entworfen und implementiert werden könnte, fand er jedoch sparsamer und einfacher zu haben diff Seien Sie verantwortlich für die Generierung des von der akzeptierten Eingangs der Syntax und des Eingangs umgekehrter Ordnung ed Befehl.

Ende 1984 Larry Wall erstellte ein separates Dienstprogramm, PatchVeröffentlichung des Quellcodes auf dem Mod.Sources und net.Sources Newsgroups.[5][6][7] Dieses Programm verallgemeinert und erweiterte die Möglichkeit, Dateien mit Ausgabe von zu ändern diff.

Modi in EMACs Ermöglichen Sie auch, dass das Format von Patches und sogar Patches interaktiv bearbeitet wird.

Im diffZu den frühen Jahren gehörten gemeinsame Verwendungen zum Vergleich von Änderungen in der Quelle von Softwarecode und Markup für technische Dokumente, Überprüfung der Debugging -Ausgabe, Vergleich von Dateisystemlisten und Analyse von Computer -Montage -Code. Die Ausgabe für abgestimmt für ed war motiviert, eine Abfolge von Modifikationen an einer Datei zu komprimieren. Das Quellcode -Steuerungssystem (SCCS) und seine Fähigkeit, Revisionen in den späten 1970er Jahren zu archivieren diff.

Algorithmus

Der Betrieb von diff basiert auf der Lösung der Das längste häufig vorkommende Subsequenzproblem.[4]

In diesem Problem bei zwei Sequenzen von Elementen:

a b c d f g h j q z 
a b c d e f g i j k r x y z 

Und wir möchten eine längste Sequenz von Elementen finden, die in beiden Originalsequenzen in derselben Reihenfolge vorhanden ist. Das heißt, wir möchten eine neue Sequenz finden, die aus der ersten Originalsequenz durch Löschen einiger Elemente und aus der zweiten Originalsequenz durch Löschen anderer Elemente erhalten werden kann. Wir möchten auch, dass diese Sequenz so lang wie möglich ist. In diesem Fall ist es

a b c d f g j z

Aus einer längsten gemeinsamen Untersequenz ist es nur ein kleiner Schritt zu bekommen diff-ähnliche Ausgabe: Wenn in der Subsequenz ein Element fehlt, aber in der ersten ursprünglichen Sequenz vorhanden ist, muss es gelöscht worden sein (wie durch die '-' Marks unten angegeben). Wenn es in der Untersequenz fehlt, aber in der zweiten Originalsequenz vorhanden ist, muss es eingefügt worden sein (wie durch die '+' Marks angegeben).

e h i q k r x y + - + - + + + +

Verwendungszweck

Das diff Der Befehl wird aus der Befehlszeile aufgerufen und die Namen zweier Dateien übergeben: difforiginal neu. Die Ausgabe des Befehls repräsentiert die Änderungen, die für die Transformation der erforderlich sind Original Datei in die Neu Datei.

Wenn Original und Neu sind Verzeichnisse dann diff wird in jeder Datei ausgeführt, die in beiden Verzeichnissen vorhanden ist. Eine Option, -r, wird rekursiv alle passenden Unterverzeichnisse zum Vergleich von Dateien zwischen Verzeichnissen absteigen.

Alle Beispiele im Artikel verwenden die folgenden zwei Dateien. Original und Neu:

In diesem traditionellen Ausgangsformat, a steht für hinzugefügt, d zum gelöscht und c zum geändert. Zeilennummern der Originaldatei werden zuvor angezeigt a/d/c und die der neuen Datei erscheinen danach. Das weniger als und größer als Anzeichen (zu Beginn von hinzugefügten Zeilen, gelöscht oder geändert) geben an, in welcher Datei die Zeilen angezeigt werden. Zeilen werden zur Originaldatei hinzugefügt, die in der neuen Datei angezeigt werden. Löschleitungen werden aus der Originaldatei gelöscht, die in der neuen Datei fehlt.

Standardmäßig werden Zeilen, die bei beiden Dateien gemeinsam sind, nicht angezeigt. Leitungen, die sich bewegt haben, werden an ihrem neuen Standort wie hinzugefügt und wie aus ihrem alten Ort gelöscht.[8] Einige Diff -Werkzeuge heben jedoch bewegte Linien hervor.

Ausgabevariationen

Skript bearbeiten

Ein ED -Skript kann immer noch durch moderne Versionen von Diff mit dem generiert werden -e Möglichkeit. Das resultierende Bearbeitungsskript für dieses Beispiel lautet wie folgt:

24a Dieser Absatz enthält Wichtige Neuzugänge zu diesem Dokument. . 17c Überprüfen Sie dieses Dokument. An . 11,15d 0a Dies ist wichtig Notiz! Es sollte deshalb befinden sich bei der Beginn davon dokumentieren! .

Um den Inhalt der Datei zu transformieren Original in den Inhalt der Datei Neu Verwendung edWir sollten zwei Zeilen an diese Diff -Datei anhängen, eine Zeile mit a w (Schreiben) Befehl und einer mit a q (beenden) Befehl (z. B. durch printf "w\nq\n" >> mydiff). Hier gaben wir der Diff -Datei den Namen Mydiff Und die Transformation wird dann geschehen, wenn wir rennen ed -s original < mydiff.

Kontextformat

Das Berkeley -Verbreitung von UNIX machte den Hinzufügen des Hinzufügens der Kontextformat (-c) und die Fähigkeit, auf Dateisystemverzeichnisstrukturen wiederzukehren (Strukturen des Dateisystems (-r) Hinzufügen dieser Funktionen in 2,8 BSD, veröffentlicht im Juli 1981. Das Kontextformat von Diff, das in Berkeley eingeführt wurde, half bei der Verteilung von Patches für Quellcode, die möglicherweise minimal geändert wurden.

Im Kontextformat werden alle veränderten Linien vor und nachher neben unveränderten Zeilen angezeigt. Die Aufnahme einer beliebigen Anzahl unveränderter Linien liefert a Kontext zum Patch. Das Kontext besteht aus Zeilen, die sich zwischen den beiden Dateien nicht geändert haben und als Referenz dienen, um den Platz der Zeilen in einer modifizierten Datei zu finden und den beabsichtigten Speicherort zu finden, damit eine Änderung angewendet wird, unabhängig davon, ob die Zeilennummern noch entsprechen. Das Kontextformat führt bei der Anwendung des Patches und einer Ausgabe, die als Eingabe an die Eingabe akzeptiert wird, eine größere Lesbarkeit für Menschen und Zuverlässigkeit vor Patch Programm. Dieses intelligente Verhalten ist mit der traditionellen Diff -Ausgabe nicht möglich.

Die Anzahl der oben gezeigten unveränderten Linien, die oben und unter einer Änderung gezeigt sind Stück Kann vom Benutzer definiert werden, sogar Null, aber drei Zeilen sind in der Regel die Standardeinstellung. Wenn der Kontext von unveränderten Linien in einem Stück mit einem benachbarten Stück überschneidet, vermeidet Diff die Duplikation der unveränderten Linien und verschmelzen die Hunger in einen einzigen Stück.

EIN "!"Stellt eine Änderung zwischen Zeilen dar, die in den beiden Dateien entsprechen, während a"+"repräsentiert die Zugabe einer Linie und einer"-"Die Entfernung einer Linie. Eine Rohliste Platz repräsentiert eine unveränderte Linie. Zu Beginn des Patchs befinden sich die Dateiinformationen, einschließlich des vollständigen Pfades und a Zeitstempel durch einen Registerkartenzeichen abgegrenzt. Zu Beginn jedes Stücks befinden sich die Zeilennummern, die für die entsprechende Änderung der Dateien gelten. Für die Originaldatei gilt ein Zahlenbereich zwischen Sätzen von drei Sternchen, während Sätze von drei Striche für die neue Datei gelten. Die Hunk -Bereiche geben die Start- und Endzeilennummern in der jeweiligen Datei an.

Der Befehl diff -c original new erzeugt die folgende Ausgabe:

***/Pfad/zum/ursprünglichen Zeitstempel---/path/to/neuer Zeitstempel ******************* *** 1,3 ****--- 1,9 ---- + Dies ist wichtig + Beachten Sie! Es sollte + Daher an der Stelle bei + der Beginn davon + Dokument! +   This part of the   document has stayed the   same from version to *************** *** 8,20 ****   compress the size of the   changes.- Dieser Absatz enthält - Text, der veraltet ist. - Es wird in der gelöscht - nahe Zukunft.   Es ist wichtig zu buchstabieren! Überprüfen Sie dieses Dokument. An   Auf der anderen Seite ist ein falsch geschriebenes Wort nicht das Ende der Welt.--- 14,21 ----Komprimieren Sie die Größe der Änderungen. Es ist wichtig zu buchstabieren! Überprüfen Sie dieses Dokument. An   Auf der anderen Seite ist ein falsch geschriebenes Wort nicht das Ende der Welt. ******************* *** 22,24 ****--- 23,29 ----   Dieser Absatz muss geändert werden. Danach können Dinge hinzugefügt werden.+ + Dieser Absatz enthält + Wichtige Neuzugänge + zu diesem Dokument. 

Notiz: Hier wird die Diff -Ausgabe mit Farben angezeigt, um das Lesen zu erleichtern. Das Diff -Dienstprogramm erzeugt keine farbige Ausgabe. seine Ausgabe ist einfacher Text. Viele Werkzeuge können jedoch die Ausgabe mit Farben mithilfe verwenden Satzstellung markieren.

Einheitliches Format

Das einheitliches Format (oder Unidiff)[9][10] Erbt die technischen Verbesserungen des Kontextformats, erzeugt jedoch einen kleineren Diff mit dem alten und neuen Text, der sofort benachbart präsentiert wird. Einheitliches Format wird normalerweise mit dem "aufgerufen" aufgerufen "-U" Befehlszeilenoption. Dieser Ausgang wird häufig als Eingang in die verwendet Patch Programm. Viele Projekte fordern ausdrücklich, dass "Diffs" im einheitlichen Format eingereicht werden, was ein einheitliches Diff -Format zum häufigsten Format für den Austausch zwischen Softwareentwicklern macht.

Einheitlicher Kontext -Diffs wurden ursprünglich von Wayne Davison im August 1990 (in Unidiff die in Band 14 von Comp.Sources.misc) erschienen. Richard Stallman Einheitliche Diff -Unterstützung für die hinzugefügt GNU -Projekt's Diff -Dienstprogramm einen Monat später und das Feature debütierte in Gnu diff 1.15, veröffentlicht im Januar 1991. GNU Diff hat das Kontextformat seitdem verallgemeinert, um eine willkürliche Formatierung von Diffs zu ermöglichen.

Das Format beginnt mit der gleichen Zwei-Linie Header Als Kontextformat, außer dass der Originaldatei vorausgeht "---"Und der neuen Datei geht es vor"+++". Im Folgenden sind ein oder mehrere Wechseln Sie die Hänge Das enthält die Zeilenunterschiede in der Datei. Den unveränderten, kontextuellen Linien gehen ein Weltraumcharakter vor, Additionslinien gehen von a voraus Pluszeichenund Deletionsleitungen gehen a voraus Minuszeichen.

Ein Stück beginnt mit Bereichsinformationen und wird sofort mit den Zeilenabzügen, Leitungslögern und einer beliebigen Anzahl der Kontextlinien verfolgt. Die Reichweiteninformationen sind doppelt umgeben bei Schildernund kombiniert eine einzelne Zeile, was in zwei Zeilen im Kontextformat erscheint (Oben). Das Format der Bereichsinformationslinie lautet wie folgt:

@@ -l, s +l, s @@ optionale Abschnitt Überschrift 

Die Informationen über die Hunk -Reichweite enthalten zwei Hunk -Bereiche. Dem Reichweite für das Stück der Originaldatei geht ein Minus -Symbol voraus, und dem Bereich für die neue Datei geht ein Plus -Symbol voraus. Jeder Knotenbereich ist aus dem Format L, s wo l ist die Startleitungsnummer und s Ist die Anzahl der Zeilen, für die der Änderungshunk für jede jeweilige Datei gilt. In vielen Versionen von GNU Diff kann jeder Bereich das Komma weglassen und den Nachverfolgungswert s, in welchem ​​Fall s standardmäßig auf 1. Beachten Sie, dass der einzig wirklich interessante Wert der ist der l Zeilennummer des ersten Bereichs; Alle anderen Werte können aus dem Diff berechnet werden.

Der Stück Reichweite für das Original sollte die Summe aller Kontext- und Löschung (einschließlich veränderter) Hunk -Linien sein. Der Stück Reichweite für die neue Datei sollte eine Summe aller Kontext- und Additionszeilen (einschließlich geänderter) Hunk -Zeilen sein. Wenn die Information der Hunkgröße nicht der Anzahl der Zeilen im Stück entspricht, kann der Diff als ungültig angesehen und abgelehnt werden.

Optional kann auf dem Böckbereich die Überschrift des Abschnitts oder der Funktion, von der der Großteil Teil ist. Dies ist hauptsächlich nützlich, um das Lesen des Diffs zu erleichtern. Beim Erstellen eines Diffs mit GNU -Diff wird die Überschrift durch identifiziert regulären Ausdruck Matching.[11]

Wenn eine Linie geändert wird, wird sie als Löschung und Ergänzung dargestellt. Da die Hunger der ursprünglichen und neuen Datei im selben Stück erscheinen, würden solche Änderungen nebeneinander erscheinen.[12] Ein Auftreten davon im folgenden Beispiel ist:

-Überprüfen Sie dieses Dokument. Überprüfen Sie dieses Dokument. An

Der Befehl diff -u original neu erzeugt die folgende Ausgabe:

---/Pfad/zum/ursprünglichen Zeitstempel +++/path/to/neuer Zeitstempel @@ -1,3 +1,9 @@ +Dies ist wichtig +Beachten Sie! Es sollte +Daher an der Stelle bei +der Beginn davon +Dokument! +  Dieser Teil des Dokuments ist von der Version bis zur Version gleich geblieben@@ -8,13 +14,8 @@  Komprimieren Sie die Größe der Änderungen.-This Absatz enthält -Text, das veraltet ist. -Es wird in der gelöscht -nahe Zukunft. -  Es ist wichtig zu buchstabieren-Überprüfen Sie dieses Dokument. An +Überprüfen Sie dieses Dokument. An  Auf der anderen Seite ist ein falsch geschriebenes Wort nicht das Ende der Welt.@@ -22,3 +23,7 @@  Dieser Absatz muss geändert werden. Danach können Dinge hinzugefügt werden.+ +Dieser Absatz enthält +Wichtige Neuzugänge +zu diesem Dokument. 

Notiz: Hier wird die Diff -Ausgabe mit Farben angezeigt, um das Lesen zu erleichtern. Das Diff -Dienstprogramm erzeugt keine farbige Ausgabe. seine Ausgabe ist einfacher Text. Viele Werkzeuge können jedoch die Ausgabe mit Farben mithilfe verwenden Satzstellung markieren.

Beachten Sie, dass der Trennzeichen zwischen ihnen ein Registerkartenzeichen ist, um die Dateinamen erfolgreich von den Zeitstempeln zu trennen. Dies ist auf dem Bildschirm unsichtbar und kann verloren gehen, wenn Diffs von Konsolen-/Terminalbildschirmen kopiert/eingefügt werden.

Es gibt einige Modifikationen und Erweiterungen der Diff -Formate, die von bestimmten Programmen und in bestimmten Kontexten verwendet und verstanden werden. Zum Beispiel einige Revisionskontrolle Systeme - wie Subversion- Geben Sie eine Versionsnummer, "Arbeitskopie" oder einen anderen Kommentar anstelle oder zusätzlich zu einem Zeitstempel im Abschnitt des Diff -Headers an oder zusätzlich zu einem Zeitstempel.

In einigen Tools können Diffs für mehrere verschiedene Dateien in einen verschmolzen werden, wobei ein Header für jede modifizierte Datei verwendet wird, die möglicherweise so aussieht:

Index: Pfad/to/file.cpp

Der Sonderfall von Dateien, die nicht in einer Newline enden, wird nicht behandelt. Weder das Unidiff -Dienstprogramm noch der POSIX -Diff -Standard definieren eine Möglichkeit, diese Art von Dateien zu verarbeiten. (In der Tat sind solche Dateien keine "Text" -Dateien nach strengen POSIX -Definitionen.[13]) Das Patch Das Programm ist sich nicht selbst einer implementierungsspezifischen Diff -Ausgabe bewusst.

Implementierungen und verwandte Programme

Änderungen seit 1975 umfassen Verbesserungen des Kernalgorithmus, die Hinzufügung nützlicher Merkmale des Befehls und das Design neuer Ausgangsformate. Der Grundalgorithmus wird in den Papieren beschrieben Ein O (ND) -Differenzalgorithmus und seine Variationen von Eugene W. Myers[14] und in Ein Dateivergleichsprogramm von Webb Miller und Myers.[15] Der Algorithmus wurde unabhängig entdeckt und in beschrieben Algorithmen für die ungefähre Zeichenfolge Matching, durch Esko Ukkonen.[16] Die ersten Ausgaben des Diff -Programms wurden für Linienvergleiche von Textdateien entwickelt, die das erwarten Neue Zeile Charakter, um Linien abzugrenzen. In den 1980er Jahren führte die Unterstützung von Binärdateien zu einer Verschiebung des Designs und der Implementierung der Anwendung.

GNU Diff und Diff3 sind in der enthalten Diffutile Paket mit anderen Diff und Patch Verwandte Versorgungsunternehmen.[17] Heutzutage gibt es auch eine Patchutils Paket, das Kontext -Diffs und einheitliche Diffs kombinieren, neu ordnen, vergleichen und reparieren kann.[18]

Formatter und Frontends

Postprozessoren SDIFF und diffmk Rendern Sie Side-by-Side-Diff-Listings und angewandte Änderungsmarken für gedruckte Dokumente. Beide wurden an anderer Stelle in Bell Labs in oder vor 1981 entwickelt.[diskutieren]

Diff3 Vergleicht eine Datei mit zwei weiteren Dateien durch Eingleich von zwei Diffs. Es wurde ursprünglich von Paul Jensen konzipiert, um Änderungen von zwei Personen in Einklang zu bringen, die eine gemeinsame Quelle bearbeiteten. Es wird auch von Revisionskontrollsystemen verwendet, z. RCS, zum Verschmelzung.[19]

EMACs hat EDIFF Zur Anzeige der Änderungen, die ein Patch in einer Benutzeroberfläche bereitstellen würde, die interaktive Bearbeitung und Zusammenführungsfunktionen für Patch -Dateien kombiniert.

Vim bietet Vimdiff zum Vergleich von zwei auf acht Dateien mit Unterschieden in Farbe.[20] Modern Vim nutzt historisch das Diff -Programm, während er historisch aufgerufen wird Git's Fork of Xdiff Library (LIBXDiff) Code, die eine verbesserte Geschwindigkeit und Funktionalität bietet.[21]

Gnu wdiff[22] ist ein Front-End von Diff, das die Wörter oder Phrasen zeigt, die sich in einem Textdokument der geschriebenen Sprache auch in Gegenwart von Wortverschiebungen oder unterschiedlichen Spaltenbreiten geändert haben.

COLORDIFF ist ein Perl -Wrapper für 'Diff' und erzeugt den gleichen Ausgang, aber mit hübschem 'Syntax' hervorgehoben.[23]

Algorithmische Derivate

Dienstprogramme, die Quelldateien nach ihrer syntaktischen Struktur vergleichen, wurden hauptsächlich als Forschungsinstrumente für einige Programmiersprachen erstellt.[24][25][26] Einige sind als kommerzielle Werkzeuge erhältlich.[27][28] Zu den kostenlosen Tools, die syntaxbewusste Diff durchführen, gehören: umfassen:

  • C ++: Zograscope, AST-basiert.[29]
  • HTML: Daisydiff,[30] html-differer.
  • Xml: Xmldiffpatch von Microsoft und Xmldiffmerge für IBM.[31][32]
  • JavaScript: ASTII (AST-basiert).
  • Multisprachiger: Ziemlich diff (Formatcode und dann diff)[33]

Spiff ist eine Variante von diff Das ignoriert Unterschiede in den Floating Point -Berechnungen mit Roundoff -Fehlern und WhitespaceBeide sind im Allgemeinen für den Quellcode -Vergleich irrelevant. Bellcore schrieb die Originalversion.[34][35] Ein HPUX Port ist die aktuellste Veröffentlichung. SPIFF unterstützt keine Binärdateien. SPIFF -Ausgaben an die Standardausgabe im Standard -Diff -Format und akzeptiert Eingaben in der C, Bourne Shell, Forran, Modula-2 und Lispeln Programmiersprachen.[36][37][34][38][35]

Libxdiff ist ein LGPL Bibliothek Das bietet eine Schnittstelle zu vielen Algorithmen von 1998. Ein verbesserter Myers -Algorithmus mit Rabin -Fingerabdruck wurde ursprünglich implementiert (ab der endgültigen Veröffentlichung von 2008),[39] aber Git und libgit2Die Gabel hat das Repository seitdem mit vielen seiner eigenen erweitert. Ein Algorithmus namens "Histogramm" wird allgemein als viel besser angesehen als der ursprüngliche Myers -Algorithmus, sowohl in Geschwindigkeit als auch in der Qualität.[40][41] Dies ist die moderne Version von Libxdiff verwendet von Vim.[21]

Siehe auch

Andere kostenlose Dateivergleichstools

Verweise

  1. ^ Mackenzie et al. "Binärdateien und Erzwingen des Textvergleichs" in Vergleich und Zusammenführen von Dateien mit GNU Diff und Patch. Heruntergeladen am 28. April 2007. [1] Archiviert 2017-12-19 bei der Wayback -Maschine
  2. ^ Eric S. Raymond (Hrsg.), "diff" Archiviert 2014-01-31 bei der Wayback -Maschine, Die Jargon -Datei, Version 4.4.7
  3. ^ IEEE Computer Society; Die offene Gruppe (26. September 2008). Standard für Informationstechnologie - POSIX -Spezifikationen (Portable Operating System Interface), Ausgabe 7. S. 2599–2607. IEEE STD. 1003.1-2001 Gibt traditionelle "ED-Skript" und Kontext-Diff-Ausgangsformate an. IEEE STD. 1003.1-2008 fügte das (bis dahin häufigere) einheitliche Format hinzu.
  4. ^ a b James W. Hunt; M. Douglas McIlroy (Juni 1976). "Ein Algorithmus für Differentialdateivergleich" (PDF). Technischer Bericht über Computing Science, Bell Laboratories. 41. Archiviert (PDF) vom Original am 2014-12-26. Abgerufen 2015-05-06.
  5. ^ Larry Wall (9. November 1984). "Ein Patch Applier-du willst das !!!". Newsgroup:net.Sources. Usenet: [email protected]. Archiviert vom Original am 19. Februar 2022. Abgerufen 11. Mai, 2015.
  6. ^ Larry Wall (29. November 1984). "Patch Version 1.2-Sie wollen das". Newsgroup:net.Sources. Usenet: [email protected]. Archiviert vom Original am 21. März 2020. Abgerufen 11. Mai, 2015.
  7. ^ Larry Wall (8. Mai 1985). "Patch Version 1.3". Newsgroup:net.Sources. Usenet: [email protected]. Archiviert vom Original am 19. Februar 2022. Abgerufen 11. Mai, 2015.
  8. ^ David Mackenzie; Paul Eggert; Richard Stallman (1997). Vergleich und Zusammenführen von Dateien mit GNU Diff und Patch. Bristol: Netzwerktheorie. ISBN 978-0-9541617-5-0. Archiviert vom Original am 2015-03-31. Abgerufen 2015-03-17.
  9. ^ "Detaillierte Beschreibung des einheitlichen Formats". GNU Diffutils (Version 3.7, 7. Januar 2018). Archiviert Aus dem Original am 18. Januar 2020. Abgerufen 29. Januar 2020.
  10. ^ Van Rossum, Guido. "Unified Diff -Format". Alle Dinge pythonisch. Archiviert vom Original am 2019-12-25. Abgerufen 2020-01-29.
  11. ^ 2.2.3 zeigt, in welchen Abschnitten Unterschiede befinden, GNU Diffutils -Handbuch
  12. ^ Einheitliches Diff -Format durch Guido van Rossum, 14. Juni 2006
  13. ^ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/v1_chap03.html#tag_03_403 Archiviert 2013-04-29 bei der Wayback -Maschine Abschnitt 3.206
  14. ^ E. Myers (1986). "Ein o (nd) Differenzalgorithmus und seine Variationen". Algorithmus. 1 (2): 251–266. Citeseerx 10.1.1.4.6927. doi:10.1007/bf01840446. S2CID 6996809.
  15. ^ Webb Miller; Eugene W. Myers (1985). "Ein Dateivergleichsprogramm". Software: Übung und Erfahrung. 15 (11): 1025–1040. Citeseerx 10.1.1.189.70. doi:10.1002/spe.4380151102. S2CID 15489614.
  16. ^ Esko Ukkonen (1985). "Algorithmen für die ungefähre Zeichenfolge Matching". Informationen und Kontrolle. 64 (1–3): 100–118. doi:10.1016/s0019-9958 (85) 80046-2.
  17. ^ GNU -Differenzierungsunternehmen Archiviert 2015-03-16 bei der Wayback -Maschine. Von der verfügbar gemacht Kostenlose Software -Stiftung. Kostenlose Dokumentation. Kostenloser Quellcode.
  18. ^ Waugh, Tim (12. Juni 2020). "Twaugh/Patchutils". GitHub. Archiviert Aus dem Original am 1. Oktober 2020. Abgerufen 28. Juni 2020.
  19. ^ "Merge (GNU RCS 5.10.0)". gnu.org. Archiviert Aus dem Original am 18. September 2019. Abgerufen 22. Januar 2021.
  20. ^ Moolenaar, Bram. "VIM -Dokumentation: Diff". vimdoc.sourceforge.net. Archiviert vom Original am 16. Februar 2020. Abgerufen 1. Mai 2020. Der einfachste Weg, um im Diff -Modus zu bearbeiten, ist der Befehl "vimdiff". Dies beginnt VIM wie gewohnt und setzt sich zusätzlich um, um die Unterschiede zwischen den Argumenten anzuzeigen. vimdiff file1 Datei2 [Datei3] [Datei4] [... Datei8] Dies entspricht: vim -d Datei1 Datei2 [Datei3] [Datei4] [... Datei8]
  21. ^ a b Brabandt, Christian (1. Dezember 2018). "Die Kraft von Diff". Vimways. Archiviert Aus dem Original am 2. Dezember 2018. Abgerufen 1. Mai 2020.
  22. ^ "gnu.org". www.gnu.org. Archiviert vom Original am 2020-08-11. Abgerufen 2020-09-12.
  23. ^ "Colordiff". www.colordiff.org. Archiviert vom Original am 2018-06-14. Abgerufen 2018-06-14.
  24. ^ Horwitz, Susan (Juni 1990). "Identifizieren der semantischen und textuellen Unterschiede zwischen zwei Versionen eines Programms". ACM Sigplan nennt. 25 (6): 234–245. Citeseerx 10.1.1.49.3377. doi:10.1145/93548.93574. Archiviert vom Original am 2010-06-12. Abgerufen 2017-11-01.
  25. ^ Yang, Wuu (Juli 1991). "Identifizieren syntaktischer Unterschiede zwischen zwei Programmen". Software: Übung und Erfahrung. 21 (7): 739–755. Citeseerx 10.1.1.13.9377. doi:10.1002/spe.4380210706. S2CID 10853673.
  26. ^ Gras. CDIFF: Eine Syntax -Regie -Diff für C ++ - Programme. Proceedings Usenix C ++ Conf., S. 181-193, 1992
  27. ^ Vergleiche ++, http://www.coodesoft.com/ Archiviert 2011-11-29 bei der Wayback -Maschine
  28. ^ SmartDiffercer, http://www.semanticdesigns.com/products/smartDiffeferencer Archiviert 2009-10-14 bei der Wayback -Maschine
  29. ^ "Xaizek/Zograscope". GitHub. 26. Mai 2020. Archiviert vom Original am 21. Dezember 2020. Abgerufen 27. Juni 2020.
  30. ^ Daisydiff, https://code.google.com/p/daisydiff/ Archiviert 2015-03-19 bei der Wayback -Maschine
  31. ^ Xmldiffpatch, http://msdn.microsoft.com/en-us/library/aa302294.aspx Archiviert 2009-10-27 bei der Wayback -Maschine
  32. ^ Xmldiffmerge, http://www.alphaworks.ibm.com/tech/xmdiffmerge Archiviert 2009-09-24 bei der Wayback -Maschine
  33. ^ Cheney, Austin. Hübsche Dokumentation. http://prettydiff.com/documentation.php Archiviert 2012-07-31 bei der Wayback -Maschine
  34. ^ a b Don'tcallMedotcom. "Spiff". GitHub. Archiviert vom Original am 2015-03-26. Abgerufen 2013-06-16.
  35. ^ a b Nachbar, Daniel W (1999-12-01). "HP-UX-Porting und Archivierung". VEREINIGTES KÖNIGREICH. Archiviert vom Original am 2012-09-05. Abgerufen 2013-06-13.
  36. ^ "Spiff 1". 1988-02-02. Archiviert vom Original am 2016-10-02. Abgerufen 2013-06-16.
  37. ^ Nachbar, Daniel W (1988-02-02). "Mann Seite". VEREINIGTES KÖNIGREICH. Archiviert vom Original am 2012-09-10. Abgerufen 2013-06-16.
  38. ^ Davide (2009-09-28). "Paketüberfluss". Archiviert vom Original am 2022-02-19. Abgerufen 2013-06-16.
  39. ^ Libenzi, Davide. "Libxdiff". SourceForge Freshmeat. Archiviert vom Original am 2020-07-01. Abgerufen 2020-06-28.
  40. ^ Nugroho, Yusuf Sulistyo; Hata, Hideaki; Matsumoto, Kenichi (Januar 2020). "Wie unterschiedlich unterscheiden sich unterschiedliche Diff -Algorithmen in Git ?: Verwendung -Histogramm für Codeänderungen". Empirische Software -Engineering: 790–823. doi:10.1007/S10664-019-09772-Z. S2CID 59608676.
  41. ^ "Algorithmus -Was ist der Unterschied zwischen 'git diff -patcecy' und 'git diff - -histogram'?". Paketüberfluss. Archiviert vom Original am 2022-02-19. Abgerufen 2020-06-28. Dies zeigt in der Tat, dass Histogramm Myers leicht schlägt, während Geduld viel langsamer ist als die anderen.

Weitere Lektüre

Externe Links