我在Linux上,致力于分支PHP项目。我想创建一个我已经完成的工作的补丁文件,可以应用于最新的父代码。原始文件夹和新代码文件夹都是很多子目录(因此需要递归)。
我出于某种原因:
diff -ur folder1 folder2 > newcode.patch
我无法获得包含所有新文件的补丁文件,它甚至不包含一些更深层次的文件更改(大约3级以上)。
任何想法如何解决这个问题?我看过Meld和Kdiff3 ......但他们似乎也没做我想做的事。
答案 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来构建该补丁。
不要重新发明轮子。