Diff和patch是Linux标配的工具。在Windows上,也有移植的版本可以使用。
使用中注意:
1、 保证文件名完全相同,避免只有大小写不同的文件存在。
2、 Diff只能比较文本文件,二进制文件只能判断是否相同,不能记录差异。Diff根据文件的前几个字节判断文件是不是文本文件。
使用方法:
可以对单个文件或者整个目录树进行处理。
以最实用的方式举例:
diff –Nur dir_old dir_new > dir.patch
patch –p0 < dir.patch

注意:
Patch时,Dir.patch与目录dir_old在同一个父目录(如:parent)中,在命令行下进入parent目录,然后执行上述patch命令。
Patch执行的原理:从补丁文件dir.patch中读取应用补丁的文件名,然后在当前目录下查找该文件,找到就应用该补丁。为了让patch能够找到应用补丁的文件,根据patch的文件所在目录与当前目录的相对关系,可以用-pN指定patch读取到补丁文件中的路径之后去掉几个路径分隔符再搜索应用补丁的文件。N为0表示从补丁文件读取到的完整路径;默认表示只传递文件名;-pN表示去掉N个路径分隔符。
(实际打开一个patch文件看看再实践一下就明白了)

Diff的选项:
-a  把所有文件都作为文本文件进行比较。
-N  比较目录时,如果某文件只在一边存在,则认为另一边为空文件。
-r   递归处理目录的子目录。
-u  用统一的输出格式,即:显示3行上下文。

Patch的选项:
-pN  参见上面patch执行原理的描述。
-t    执行中不询问任何问题。
-s    silent
-d   指定搜索应用补丁文件的目录。(执行patch前自动进入该目录。)
-R   如果创建补丁文件时传递给diff的新、旧文件是反的,用此参数告诉patch把新旧文件反过来。Patch本身也会在应用补丁不成功时自动检测能否反过来应用补丁。

注:
1、 二进制文件不能用diff和patch维护。
2、 二进制文件也不能通过剪贴板复制为文本再转换回二进制文件,那样转换回去时某些地方被修改了。