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.
Wenn Sie einen Patch erhalten, können Sie den Patch häufig (sofern Sie nicht genau dieselben Zeilen geändert haben) auch auf eine Reihe von Dateien anwenden, die Sie selbst geändert haben.
Der Patch enthält Informationen zum alten und zum neuen Status der Dateien. Wenn Sie eine kopierte Datei erhalten, wissen Sie nicht, wie das Original lautete (der alte Zustand), und Sie können die Unterschiede nicht ohne große Schwierigkeiten auf eine Datei (oder eine Reihe von Dateien) anwenden, die Sie ebenfalls geändert haben. Bei Sätzen von Quelldateien ist also nicht die Speicherplatzerhaltung von größter Bedeutung, sondern die Vorher-Nachher-Information.
Früher (context / unified) wurde dies häufig mit Anweisungen für Editoren durchgeführt (Einfügen einer Zeile nach X, Löschen von Zeile Y), aber das würde nur funktionieren, wenn Sie den Status kennen, von dem diese Anweisung ausgeht. Habe also das gleiche Problem wie deine "Lösung" nur beim Kopieren.
quelle
diff -u
) eine Verbesserung für den Menschen. Sie tragendiff -c
meiner Meinung nach nicht zur Robustheit gegenüber Konflikten über reguläre Kontext-Diffs ( ) bei. Sogar plain diffs (diff
) funktionieren noch oft, ohne genau zu wissen, von welchem "Zustand diese Anweisung ausgegangen ist ". Trotzdem ist dies besser als die akzeptierte Antwort, denn darüber zu reden, wie Patch-Dateien mehrere Quelldateien gleichzeitig patchen können, ist wirklich ein roter Faden.Wenn Sie diff verwenden, können Sie sehen, was sich genau geändert hat. Mit diff / patch können Sie also verhindern, dass jemand unerwünschte Änderungen in der Datei vornimmt.
quelle
Die an den Dateien vorgenommenen Änderungen sind normalerweise viel kleiner als die geänderten Dateien.
Das bedeutet, dass Sie viel Platz sparen können, wenn Sie ein Diff speichern. Bei
diff
der Erstellung war der Speicherplatz teuer.Es bedeutet aber auch, dass Sie ein Diff erneut auf eine Datei anwenden können, auch wenn sich diese Datei auf andere Weise geändert hat. Das Patch- Dienstprogramm erledigt das für Sie und teilt Ihnen mit, wenn Probleme auftreten.
Dies ist in der Tat der wichtigste Grund, mit Unterschieden in der Softwareentwicklung zu arbeiten. Wenn eine Änderung vorgenommen wurde (normalerweise an mehr als einer Datei), kann sie als Diff gespeichert werden: Das Ergebnis wird als Änderungssatz oder Patch bezeichnet . Wenn alles in Ordnung ist, handelt es sich bei dem Patch nicht nur um eine willkürliche Änderung, sondern um eine funktionale Änderung, z. B. eine Fehlerbehebung oder eine neue Funktion.
In der Zwischenzeit kann eine andere Änderung vorgenommen werden, möglicherweise von einem anderen Entwickler, auch an einem anderen Ort. Wenn die Änderungen nicht an denselben Teilen derselben Dateien vorgenommen wurden, können sie unabhängig voneinander angewendet werden. So können sich die Entwickler gegenseitig ihre Patches zum Testen zusenden. Es können eine ganze Reihe von Patches erstellt werden, die mögliche Änderungen darstellen. Einige davon können letztendlich abgelehnt werden, der Rest wird in das System integriert.
Die Arbeit mit Diffs ermöglicht also die gleichzeitige Entwicklung. Sie müssen nicht mehr an einem Wechsel gleichzeitig arbeiten.
Moderne verteilte Versionskontrollsysteme setzen diese Arbeitsweise fort.
quelle
Kurz gesagt, es kann. Wenn Sie sich einige Thinkg Big Larry Wall-Videos auf YouTube ansehen, spricht er darüber, wie Diff / Patch gestartet wurde und welche Probleme sie lösten. Im Wesentlichen ging es darum, die Größe für die Kommunikation über das Internet zu reduzieren und die Patches flexibel und für Menschen lesbar zu halten .
Wenn Sie sich auf einem lokalen System befinden und sich nicht für eines dieser Dinge interessieren, dann
cp
oderrsync
sind Sie in Ordnung.quelle