Diffs können komplizierter sein, als nur eine Datei mit einer anderen zu vergleichen. Sie können ganze Verzeichnishierarchien vergleichen. Betrachten Sie das Beispiel, mit dem ich einen Fehler in GCC beheben möchte. Meine Änderung fügt eine oder zwei Zeilen in 4 oder 5 Dateien hinzu und löscht eine Handvoll Zeilen in diesen und anderen Dateien. Wenn ich diese Änderungen jemandem mitteilen möchte, sind meine Optionen möglicherweise für die Aufnahme in GCC
- Kopieren Sie den gesamten Quelltextbaum
- Kopieren Sie nur die Dateien, die geändert wurden
- Geben Sie nur die Änderungen an, die ich vorgenommen habe
Das Kopieren des gesamten Quellbaums ist nicht sinnvoll, aber was ist mit den beiden anderen Optionen, die den Kern Ihrer Frage ausmachen? Bedenken Sie nun, dass jemand anderes an der gleichen Datei gearbeitet hat wie ich und wir beide unsere Änderungen an jemanden weitergeben. Woher weiß diese Person, was wir getan haben und ob die Änderungen kompatibel sind (verschiedene Teile der Datei) oder in Konflikt stehen (gleiche Zeilen der Datei)? Er wird sie diffamieren! Der Diff kann ihm sagen, wie sich die Dateien voneinander und von der unveränderten Quelldatei unterscheiden. Wenn das Diff das ist, was benötigt wird, ist es sinnvoller, das Diff an erster Stelle zu senden. Ein Diff kann auch Änderungen von mehr als einer Datei enthalten. Während ich also insgesamt 9 Dateien bearbeitet habe, kann ich eine einzige Diff-Datei bereitstellen, um diese Änderungen zu beschreiben.
Diffs können auch zum Bereitstellen des Verlaufs verwendet werden. Was ist, wenn eine Änderung vor drei Monaten einen Fehler verursacht hat, den ich erst heute entdeckt habe? Wenn ich den Fehler eingrenzen und ihn auf eine bestimmte Änderung eingrenzen kann, kann ich mit dem Diff die Änderung rückgängig machen oder rückgängig machen. Dies könnte ich nicht so einfach tun, wenn ich nur Dateien kopiere.
Dies alles hängt mit der Versionskontrolle zusammen, bei der Programme den Dateiverlauf als eine Reihe von Unterschieden von der Zeit ihrer Erstellung bis heute aufzeichnen können. Die Diffs liefern einen Verlauf (ich kann die Datei wie an einem bestimmten Tag neu erstellen), ich kann sehen, wen ich für das Brechen von etwas verantwortlich mache (der Diff hat einen Besitzer) und ich kann Änderungen an vorgelagerten Projekten einfach übermitteln, indem ich ihnen spezifische Diffs gebe ( Vielleicht interessieren sie sich nur für eine Änderung, wenn ich viele vorgenommen habe.
Zusammenfassend ist ja cp
einfacher als diff
und patch
, aber der Nutzen von diff
und patch
ist größer als cp
in Situationen, in denen es wichtig ist, zu verfolgen, wie sich Dateien ändern.