патч не создает новые файлы - PullRequest
0 голосов
/ 26 сентября 2018

Я учусь использовать patch и столкнулся со странным поведением при исправлении двух каталогов:

  • original_directory содержит один файл (file1), содержащий три строки.
  • updated_directory содержит два файла: file1 с двумя дополнительными строками и дополнительный file2 (содержащий семь строк).

Я выдал diff -Nur original_directory/ updated_directory/ > original_directory.patch.Однако, когда я выполняю патч (patch -p0 < original_directory.patch), я получаю следующий вывод:

patching file updated_directory/file1
Reversed (or previously applied) patch detected!  Assume -R? [n] n
Apply anyway? [n] n
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file updated_directory/file1.rej
The next patch would create the file updated_directory/file2,
which already exists!  Assume -R? [n] n
Apply anyway? [n] n
Skipping patch.
1 out of 1 hunk ignored

Однако, когда я выпускаю cd original_directory/; patch -p1 < ../original_directory.patch, все работает просто отлично!

Яуверен, что patch -p0 < original_directory.patch работал только на днях ...

1 Ответ

0 голосов
/ 26 сентября 2018

Такое поведение ожидаемое и обычное.Ваш файл патча, вероятно, выглядит примерно так:

diff -Nur original_directory/file1 updated_directory/file1
--- original_directory/file1    2018-09-26 15:00:33.929223318 +0900
+++ updated_directory/file2 2018-09-26 15:00:41.555279201 +0900
...
...
diff -Nur original_directory/file2 updated_directory/file2
--- original_directory/file2    1970-01-01 09:00:00.000000000 +0900
+++ updated_directory/file2 2018-09-26 15:00:49.325037178 +0900
...
...

При -p1 первый компонент путей измененных файлов удаляется, поэтому patch видит инструкции для внесения изменений в file2 и file1 в текущем каталоге.

При -p0 компоненты пути не удаляются из путей, поэтому patch видит инструкции по внесению изменений в updated_directory/file2 и updated_directory/file1, но эти файлы уже имеютнеобходимые изменения.

...