Różnice mogą być bardziej skomplikowane niż porównywanie jednego pliku z drugim. Można porównać całe hierarchie katalogów. Rozważ przykład, że chcę naprawić błąd w GCC. Moja zmiana dodaje linię lub dwie w 4 lub 5 plikach i usuwa garść linii w tych i innych plikach. Jeśli chcę przekazać te zmiany komuś, potencjalnie w celu włączenia ich do GCC, mam takie opcje
- Skopiuj całe drzewo źródłowe
- Skopiuj tylko pliki, które zostały zmienione
- Podaj tylko zmiany, które wprowadziłem
Kopiowanie całego drzewa źródłowego nie ma sensu, ale co z pozostałymi dwiema opcjami, które znajdują się w centrum pytania? Teraz rozważmy, że ktoś inny również pracował nad tym samym plikiem, co ja, i oboje komuś przekazujemy nasze zmiany. Skąd ta osoba będzie wiedziała, co zrobiliśmy i czy zmiany są kompatybilne (różne części pliku) lub konflikt (te same linie pliku)? Będzie je różnicował! Różnica może powiedzieć mu, w jaki sposób pliki różnią się od siebie i od niezmodyfikowanego pliku źródłowego. Jeśli potrzebna jest różnica, to po prostu sensowniej jest po prostu wysłać różnicę. Różnica może również zawierać zmiany z więcej niż jednego pliku, więc podczas gdy w sumie edytowałem 9 plików, mogę dostarczyć pojedynczy plik różnic, aby opisać te zmiany.
Różnice mogą być również wykorzystane do zapewnienia historii. Co jeśli zmiana trzy miesiące temu spowodowała błąd, który odkryłem dopiero dzisiaj. Jeśli mogę zawęzić zakres, kiedy błąd został wprowadzony i mogę go wyodrębnić do określonej zmiany, mogę użyć diff, aby „cofnąć” lub cofnąć zmianę. Nie jest to coś, co mógłbym równie łatwo zrobić, gdybym tylko kopiował pliki.
Wszystko to wiąże się z kontrolą wersji źródłowej, w której programy mogą zapisywać historię plików jako serię różnic od czasu jej utworzenia do dzisiaj. Różnice dostarczają historię (mogę odtworzyć plik tak, jak był w danym dniu), widzę, kogo winić za zerwanie czegoś (diff ma właściciela) i mogę łatwo przesyłać zmiany do projektów nadrzędnych, nadając im określone różnice ( może są zainteresowani tylko jedną zmianą, kiedy dokonałem wielu).
Podsumowując, tak, cp
jest łatwiejsze niż diff
i patch
, ale użyteczność diff
i patch
jest większa niż cp
w sytuacjach, w których zmiany plików są ważne do śledzenia.