freebsd:diff

Це стара версія документу!


diff patch

https://stackoverflow.com/a/9982282

Щоб створити файл виправлення:

  1. Елемент нумерованого спискуПомістіть копії обох каталогів, скажімо, в /tmp, щоб ми могли створити файл виправлення, або, якщо ви сміливі, розмістіть їх поруч - в одному каталозі.
  1. Елемент нумерованого спискуЗапустіть відповідну різницю в двох каталогах, старому та новому:

```diff -ruN orig/ new/ > file.patch # -r == recursive, so do subdirectories # -u == unified style, if your system lacks it or if recipient # may not have it, use “-c” # -N == treat absent files as empty```

Якщо в користувача є каталог orig/, він може відтворити новий, запустивши patch.

Щоб повторно створити нову папку зі старої папки та файлу виправлення:

  1. Елемент нумерованого спискуПеремістіть файл виправлення до каталогу, де існує папка orig/
  1. Елемент нумерованого спискуЦю папку буде знищено, тому збережіть десь її резервну копію або скористайтеся копією.

`patch -s -p0 < file.patch # -s == silent except errors # -p0 == needed to find the proper folder` На цьому етапі папка 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 є багато застережень , тому мені знадобилися години, щоб зрозуміти щось таке концептуально просте. Абсолютні шляхи, здається, мають перевагу над відносними шляхами, і багато варіантів, здається, розвинулися з нішевих випадків використання. Нарешті я знайшов рішення на основі відповіді Девіда Х з додатковими порадами від Лакшманана Ганапаті ):

  • Елемент ненумерованого спискуРезервне копіювання вашого directoryдоdirectory.orig
  • Елемент ненумерованого спискуЗмініть свій directory, щоб досягти бажаного стану
  • Елемент ненумерованого спискуЗбережіть різницю від directory.origдо directory, file.patchщоб ім’я відповідало одержувачу

Ось мої нотатки:

`# to create patch: # copy <directory> backup to something like <directory>.orig alongside it cp -r <path_to>/<directory> <path_to>/<directory>.orig # create/update/delete files/folders in <directory> until desired state is reached # change working directory to <directory> cd <path_to>/<directory> # create patch file alongside <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.`

Цей сайт використовує кукі. Перебуваючи тут, ви погоджуєтеся з їх зберіганням на вашому комп'ютері. Також ви підтверджуєте, що прочитали і зрозуміли нашу Політику конфіденційності. Якщо ви не згодні - покиньте сайт.Більше інформації про куки
  • freebsd/diff.1673788325.txt.gz
  • Востаннє змінено: 15/01/2023 13:12
  • повз Method