如何使用diff递归创建补丁文件

时间:2012-01-01 01:05:29

标签: php diff

我在Linux上,致力于分支PHP项目。我想创建一个我已经完成的工作的补丁文件,可以应用于最新的父代码。原始文件夹和新代码文件夹都是很多子目录(因此需要递归)。

我出于某种原因:

diff -ur folder1 folder2 > newcode.patch

我无法获得包含所有新文件的补丁文件,它甚至不包含一些更深层次的文件更改(大约3级以上)。

任何想法如何解决这个问题?我看过Meld和Kdiff3 ......但他们似乎也没做我想做的事。

3 个答案:

答案 0 :(得分:9)

我怀疑你的目录结构类似于:

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 :(得分:1)

如果diff -r没有按照手册页中的描述工作,那么它显然已被破坏;但是,我会使用原始代码创建一个本地版本控制存储库,然后,一旦您提交了该代码,就提交新代码。任何有价值的版本控制系统都能够在已提交的版本之间创建补丁。

答案 2 :(得分:0)

我假设原始项目是在某种版本的源代码管理下。如果是这样,应该为该源控制系统构建好的工具,以便您创建补丁。例如,如果源控制系统是Subversion(SVN),并且您在Windows上,则可以使用TortoiseSVN来构建该补丁。

不要重新发明轮子。