Как рекурсивно создать файл патча, используя diff - PullRequest
4 голосов
/ 01 января 2012

Я работаю над Linux, разрабатываю проект PHP.Я хочу создать файл патча для проделанной мной работы, который можно применить к последнему родительскому коду.Как исходная папка, так и новая папка с кодом имеют много подкаталогов (поэтому нуждаются в рекурсии).

По какой-то причине, когда я делаю:

diff -ur folder1 folder2 > newcode.patch

Мне не удается получить файл исправления, включаявсе новые файлы, и он даже не содержит некоторых более глубоких изменений файлов (около 3+ уровней).

Есть идеи, как это сделать?Я смотрел на Мелда и Kdiff3 ... но они, похоже, тоже не делают то, что я хочу.

Ответы [ 3 ]

9 голосов
/ 01 января 2012

Я подозреваю, что у вас есть структура каталогов, похожая на:

folder1/
  text.txt
  level1/
    text1.txt
    level2/
      text2.txt
      level3/
        text3.txt

folder2
  text.txt
  level1/
    text1.txt
    level2/
      text2.txt
      anewdirectory/
        newtext.txt
      level3/
        text3.txt
        newfiled3.txt

В этом случае diff будет игнорировать файл newtext.txt в пределах anewdirectory/. Вероятно, он также не принимает текст newfiled3.txt. Вместо этого он сообщает что-то вроде:

..
Only in folder2/level1/level2/ : anewdirectory
Only in folder2/level1/level2/level3/ : newfiled3.txt
..

Это симптом, который вы видите?
Попробуйте:

diff -urBNs folder1/ folder2/ > code.patch
1 голос
/ 01 января 2012

Если diff -r не работает, как описано на странице руководства, оно явно не работает;Тем не менее, я бы создал локальный репозиторий для контроля версий, используя исходный код, а затем, как только вы это подтвердите, зафиксируйте новый код.Любая достойная соль система контроля версий сможет создать патч между зафиксированными версиями.

0 голосов
/ 01 января 2012

Я предполагаю, что оригинальный проект находится под некоторой версией системы контроля версий.Если так, то для этой системы контроля версий должны быть созданы хорошие инструменты, которые позволят вам создать патч.Например, если исходной системой управления является Subversion (SVN) и вы работаете в Windows, вы можете использовать TortoiseSVN для создания этого патча.

Не изобретайте велосипед.

...