Відмінності можуть бути складнішими, ніж просто порівняння одного файлу з іншим. Можна порівняти цілі ієрархії каталогів. Розглянемо приклад, що я хочу виправити помилку в GCC. Моя зміна додає рядок або два в 4 або 5 файлах і видаляє кілька рядків у тих та інших файлах. Якщо я хочу повідомити про ці зміни комусь, можливо, для включення до GCC я мої варіанти
- Скопіюйте все початкове дерево
- Скопіюйте лише ті файли, які були змінені
- Постачайте лише ті зміни, які я вніс
Копіювати все дерево-джерело не має сенсу, але що стосується двох інших варіантів, які лежать в основі вашого запитання. Тепер подумайте, що ще хтось працював над тим же файлом, що і я, і ми обидва передаємо свої зміни комусь. Як ця особа дізнається, що ми зробили, і якщо зміни сумісні (різні частини файлу) чи конфліктні (однакові рядки файлу)? Він їх відрізнятиме! Різниця може сказати йому, як файли відрізняються один від одного та від немодифікованого вихідного файлу. Якщо diff - це те, що потрібно, просто має більше сенсу просто надіслати diff в першу чергу. Розмінність також може містити зміни з більш ніж одного файлу, тому, хоча я редагував 9 файлів загалом, я можу надати один розрізний файл для опису цих змін.
Відмінності також можна використовувати для надання історії. Що робити, якщо зміна три місяці тому спричинила помилку, яку я виявив лише сьогодні. Якщо я можу звузити, коли помилка була введена, і можу виділити її до певної зміни, я можу використовувати diff для "скасування" або повернення зміни. Це не те, що я міг би так легко зробити, якби тільки копіював файли навколо.
Це все пов'язано з контролем версій джерела, де програми можуть записувати історію файлів як серію, що відрізняється від часу їх створення до сьогодні. Історія diffs надає історію (я можу відтворити файл таким, яким він був у будь-який конкретний день), я можу побачити, хто винен у тому, що щось порушив (у diff є власник), і я можу легко надсилати зміни до вищезазначених проектів, надаючи їм конкретні diff ( можливо, їх цікавить лише одна зміна, коли я зробив багато).
Загалом, так, cp
це простіше , ніж diff
та patch
, але корисність diff
і patch
більше , ніж cp
в ситуації , коли , яким чином зміна файлів важливо відстежувати.