https://stackoverflow.com/a/9982282
Щоб створити файл виправлення:
diff -ruN orig/ new/ > file.patch
Якщо в користувача є каталог orig/, він може відтворити новий, запустивши patch.
Щоб повторно створити нову папку зі старої папки та файлу виправлення:
patch -s -p0 < file.patch
На цьому етапі папка orig/ містить новий вміст, але все ще має стару назву, тому:
mv orig/ new/ # if the folder names are different
patch виправляв для мене каталог new/not orig/, але я знайшов -d опцію, яка дозволяє вам спочатку сказати cd в цьому каталозі перед застосуванням виправлення, а потім ви можете відповідно налаштувати -p N аргумент.
https://stackoverflow.com/a/51662346
Мені потрібно було створити файл виправлення та надіслати його комусь, щоб вони могли оновити свій каталог відповідно до мого. Однак у diff і patch є багато застережень , тому мені знадобилися години, щоб зрозуміти щось таке концептуально просте. Абсолютні шляхи, здається, мають перевагу над відносними шляхами, і багато варіантів, здається, розвинулися з нішевих випадків використання. Нарешті я знайшов рішення на основі відповіді Девіда Х з додатковими порадами від Лакшманана Ганапаті ):
Ось мої нотатки:
to create patch:
cp -r <path_to>/<directory> <path_to>/<directory>.orig
cd <path_to>/<directory>
diff -Naru ../<directory>.orig . > ../file.patch
# -N –new-file Treat absent files as empty.
# -a –text Treat all files as text.
# -r –recursive Recursively compare any subdirectories found.
# -u -U NUM –unified[=NUM] Output NUM (default 3) lines of unified context.
to apply patch change working directory to <directory>
cd <path_to>/<directory> patch -s -p0 < <path_to>/file.patch
# -s or –silent or –quiet Work silently, unless an error occurs.
# -pN or –strip=N Strip smallest prefix containing num leading slashes from files.
to undo patch (note that directories created by patch must be removed manually):
# change working directory to <directory> cd <path_to>/<directory> patch -Rs -p0 < <path_to>/file.patch # -R or --reverse Assume that patch was created with the old and new files swapped. # -s or --silent or --quiet Work silently, unless an error occurs. # -pN or --strip=N Strip smallest prefix containing num leading slashes from files.`
Для створення патча:
Щоб застосувати патч:
Щоб скасувати виправлення (зауважте, що каталоги, створені за допомогою виправлення, потрібно видалити вручну):
cd /usr/local/ cp -a nodeny nodeny.orig # change nodeny # make patch diff -Naru nodeny.orig/ nodeny/ > ./pon_r710_01.patch # apply patch for nodeny.orig cd /usr/local/nodeny.orig/ patch -d . -Efu --posix -p1 < ../pon_r710_01.patch