Diff and Patch для нескольких файлов - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в Linux и Bash, поэтому извините, если мой вопрос будет глупым, но у меня проблема с созданием и применением файла патча.

Допустим, у меня есть два каталога original / и new / , а в исходном каталоге есть несколько файлов, таких как 4 или 5, которые либо полностью отсутствуют в new / или изменены, и некоторые из них находятся в некоторых подкаталогах.

В соответствии с некоторыми уроками я должен использовать diff -rubN original/ new/ > patch.diff, но в других уроках утверждается обратное: diff -rubN new/ original/ > patch.diff

В любом случае, если я использую первый, а затем запускаю patch -t -p0 < patch.diff, происходит странная вещь, я получаю результаты "исправления файла оригинала / подпапки / имени файла" для всех файлов, а затем папка оригинала / исчезает, Папка new / все еще пуста, и мне нужно снова запустить команду исправления. Когда я получаю сообщения «Следующий патч удалит файл new / subfolder / filename, который не существует!» - после этого в папке new / есть файлы, что нормально, но я не знаю:

  • почему была удалена папка original /
  • почему мне нужно дважды запустить команду исправления, чтобы получить файлы в папку new /
  • почему патч дает мне сообщение о том, что файл не существует, когда они есть?

Редактировать: если это не ясно из текста, я пытаюсь перенести изменения, которые находятся в файлах в папке original / , в папку new / . Кажется, что второй diff (diff -rubN new/ original/ > patch.diff) работает для этого случая и только для одного файла, как и должно ... но как только diff будет более чем для одного файла, например, если я добавлю новый файл в * 1041 Папка * original / , которой нет в папке new / , патч заканчивается таким странным образом, удаляя файл, который не находится в папке new / , и печатая сообщение что "Следующий патч создаст файл ../path к исходному файлу / .., который уже существует!" и "исправление файла ../path к исходному файлу"

Также одно новое наблюдение, после первого патча, рекомендующего только файлы, которых нет в папке new / , похоже, удаляется из папки original /

Edit2: Хорошо, просто узнайте, что если я использую cd new/; patch -p1 < ../patch.diff, патч заканчивается ОК, а папка original / не удаляется. Я просто не понял, почему , потому что мне кажется, что это не тот же самый код -> p0 из каталога, где папки / original и / new - это OR p1 из каталога / new .... Я не вижу разницы

...