选择皮肤
jiang
2023-05-03 14:15:02
jiang\n楼主

Linux下补丁文件生成、打补丁操作(diff、patch)

jiang
2023-05-03 14:15:52
jiang\n楼主
Linux下的一些开源的软件源码包释放时会有一个软件包和补丁文件,我们根据需求可以选择是否对这个软件包进行打补丁。同时,有时为了记录对一些比较庞大的软件工程的源码的更改位置时,也会将自己对源代码的更改的生成补丁文件。补丁文件便于释放给别人,也可以记录我们对源码更改的位置,便于我们后期进行追溯。因此,学习如何制作补丁文件和打补丁操作很有意义。
jiang
2023-05-03 14:17:48
jiang\n楼主

1、补丁生成

补丁文件是通过diff命令生成的,生成补丁文件的命令使用格式如下:
diff -uNr src modify > patch_file
对于diff命令,它的功能就是逐行比较两个文件的不同,然后输出比较的结果。如果将diif输出的比较结果保存到某个文件中,这个文件也就是所谓的diff补丁文件
命令选项:
  • -u:选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些
  • -N:选项确保补丁文件将正确地处理已经创建和删除文件的情况
  • -r:递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件
FILES:
  • src:源文件(目录),未进行修改的
  • modify:基于src,根据需求对里面的文件内容修改之后结果
">" 是重定向符号,表示将diff比较的结果重定向输入到patchfile文件中(如不指定重定向,diff的结果将打印到标准输出),patchfile文件一般指定以.patch为后缀。
上述的补丁命令的功能就是逐个比较源文件(夹)和目标文件(夹)的所有文件,将差异信息记录到patchfile中,patchfile文件也就是我们所谓的补丁文件。
jiang
2023-05-03 14:20:42
jiang\n楼主

2、打补丁

有了补丁文件那么就可以来进行打补丁操作了,打补丁是通过patch命令完成的。一般情况下,打补丁命令使用格式如下(这里只介绍了对源文件(夹)进行打补丁操作):
patch -pN < xxx.patch
xxx.patch文件是上面diff命令生成的补丁文件,打补丁就是patch利用diff制作的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以从源文件(夹)到目的文件(夹),也可以目的文件(夹)到源文件(夹)。一般情况下,我们都是将源文件打补丁到我们修改后的目的文件。
选项:
  • -pN:选项打补丁时要忽略掉第N层目录
这里还是以实例来说明-pN选项的作用,假如补丁文件内有这样格式内容:
diff -uNr src/bsp/bsp_led.c modify/bsp/bsp_led.c
当我们在src目录下进行打补丁时,此时打补丁所在的目录是在src目录,它从当前目录下可以寻找bsp的文件夹,在它下面找bsp_led.c,所以此时需要用-p1来指定忽略第一个/前的目录(这里用到的是相对路径)。