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、 二进制文件也不能通过剪贴板复制为文本再转换回二进制文件,那样转换回去时某些地方被修改了。