Различия могут быть более сложными, чем просто сравнение одного файла с другим. Может сравнивать целые иерархии каталогов. Рассмотрим пример, в котором я хочу исправить ошибку в GCC. Мое изменение добавляет одну или две строки в 4 или 5 файлов и удаляет несколько строк в этих и других файлах. Если я хочу сообщить об этих изменениях кому-то, возможно, для включения в GCC мои варианты
- Скопируйте все исходное дерево
- Скопируйте только файлы, которые были изменены
- Поставьте только те изменения, которые я сделал
Копировать все дерево исходных текстов не имеет смысла, но как насчет двух других вариантов, которые составляют суть вашего вопроса. Теперь учтите, что кто-то еще работал над тем же файлом, что и я, и мы оба передаем свои изменения кому-то. Как этот человек узнает, что мы сделали, и если изменения совместимы (разные части файла) или конфликтуют (одни и те же строки файла)? Он будет их отличать! Разница может сказать ему, как файлы отличаются друг от друга и от неизмененного исходного файла. Если необходим разност, просто имеет смысл отправлять различие в первую очередь. Различия также могут содержать изменения из более чем одного файла, поэтому, хотя я отредактировал всего 9 файлов, я могу предоставить один файл различий для описания этих изменений.
Различия также могут быть использованы для предоставления истории. Что, если изменение три месяца назад вызвало ошибку, которую я обнаружил только сегодня. Если я смогу сузить время появления ошибки и изолировать ее от конкретного изменения, я смогу использовать diff, чтобы «отменить» или отменить изменение. Это не то, что я мог бы так легко сделать, если бы я только копировал файлы.
Все это связано с контролем версий исходного кода, где программы могут записывать историю файлов в виде серии различий с момента ее создания до сегодняшнего дня. Различия обеспечивают историю (я могу воссоздать файл, как это было в любой конкретный день), я вижу, кто виноват в том, что что-то сломалось (у различий есть владелец), и я могу легко представить изменения в исходные проекты, предоставив им конкретные разности ( возможно, они заинтересованы только в одном изменении, когда я сделал много).
Таким образом, да, cp
это проще, чем diff
и patch
, но полезность diff
и patch
больше, чем cp
в ситуациях, когда важно отслеживать изменение файлов.