我在Linux上,工作在一个PHP项目的分支。我想为我所做的工作创建一个补丁文件,可以应用于最新的父代码。原文件夹和新代码文件夹都有很多子目录深(所以需要递归)。
由于某些原因,当我这样做的时候:
diff -ur folder1 folder2 > newcode.patch
我没有设法得到包含所有新文件的补丁文件,它甚至不包含一些更深的文件更改(大约3+级深)。
有什么好主意吗?我看过梅尔德和迪夫了……
我怀疑您的目录结构类似于:
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
将忽略anewdirectory/
中的文件newtext.txt
。它很可能也不会拾取newfiled3.txt
的文本。相反,它报告如下内容:
..
Only in folder2/level1/level2/ : anewdirectory
Only in folder2/level1/level2/level3/ : newfiled3.txt
..
这就是你所看到的症状吗?
试一试:
diff -urBNs folder1/ folder2/ > code.patch
如果diff -r
不像手册页中描述的那样工作,它显然是坏的;但是,我会使用原始代码创建一个本地版本控制存储库,然后,一旦提交了原始代码,再提交新代码。任何称职的版本控制系统都能够在提交的版本之间创建补丁。
我假设原始项目处于某个版本的源代码控制之下。如果是这样的话,应该有一些很好的工具为这个源代码控制系统构建,让你可以创建一个补丁。例如,如果源代码控制系统是Subversion (SVN),并且您使用的是Windows,则可以使用TortoiseSVN来构建该补丁。
不要重新发明轮子。