diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上。在数学上说,diff就是对两个集合的差运算,patch就是对两个集合的和运算。在数学上我们知道: A - B = C, 这样我们知道 A、B、C中任意两个数都可以得到第三个数:
下面我们以linux-3.0内核举例说明:
如下图所示,linux目录下有从官网下载的内核源码
linux-3.0,还有经过自己DIY重新改过的linux内核
linux-3.0.changed。
![](https://i-blog.csdnimg.cn/blog_migrate/d8e9c4f94829342202e082b650b2f794.png)
通过diff命令,生成自己命名的补丁文件。
diff —Nuar linux-3.0 linux-3.0-changed > linux-3.0-patch
![](https://i-blog.csdnimg.cn/blog_migrate/a7e77be8de2e9cc5fa022a1d9e48742b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6832d1998c61f2eecf8cc799bcfbf55f.png)
此时三个文件的关系是:
linux-3.0
+
linux-3.0-patch
=
linux-3.0-changed
保存patch补丁后,每次只需使用如下命令,就能给文件打上补丁
:
patch -p0 <linux-3.0-patch
patch -p1 <../linux-3.0-patch
两个命令的区别如图:
![](https://i-blog.csdnimg.cn/blog_migrate/03133fee5bf5e5e8a57c3dfeb50cf658.png)
-R能将打过补丁的文件还原:
patch -R -p0 < linux-3.0-patch
再一次牢记这四个命令
diff -Nuar linux-3.0 linux-3.0-changed > linux-3.0-patch
patch -p0 <linux-3.0-patch
patch -p1 <../linux-3.0-patch
patch -R -p0 < linux-3.0-patch