linux下diff命令与patch命令使用

1、制作补丁

diff的使用

diff可以完成比较功能,生成补丁文件

格式:diff [option] oldfile newfile

常用的option选项有:

-r 对目录进行递归处理

-u 输出统一格式,diff有"传统"和"统一"两种格式,现在一般使用"统一"格式,比较而言,统一格式生成的文件大,但包含了更多的信息,有利于阅读与定位

-N 补丁中包含整个新文件

-a 补丁中包含二进制文件

缺省时,diff向标准输出打印,所以一般都重定向到文件并以patch为后缀,也就是所谓的补丁文件


2、打补丁

patch 命令用于打补丁,补丁文件是使用diff产生的

patch 命令语法

patch [  -b [ -B Prefix ] ] [  -f ] [ -l ] [ -N ] [ -R ] [  -s ] [  -v ] [  -c | -e | -n ] [  -d Directory ] [  -D Define ] [  -F Number ] [  -i PatchFile ] [  -o OutFile ] [  -p Number ] [  -r RejectFile ] [  -x Number ] [ File ]

patch 命令失败或拒绝接受补丁时,会产生一个和原文件同名,以".rej"为后缀的差异文件。    当知道 -b 时,会产生一个和原文件同名,以".orig"为后缀的备份文件。

常使用的 patch 参数:

-p 指定目录级别(从路径全称中除去几层目录)

如,如果补丁文件包含路径名称 /curds/whey/src/blurfl/blurfl.c,那么:

  -p 0 使用完整路径名   -p 1 除去前导斜杠,留下 curds/whey/src/blurfl/blurfl.c。   -p 4 除去前导斜杠和前三个目录,留下 blurfl/blurfl.c。

    -d Directory 打补丁前,更改当前目录到指定目录

-i PatchFile 从指定文件,而不是从标准输入中读取补丁信息

-R 逆向补丁,这个选项在防止打错补丁很有用处


3、注意

1、要打补丁的文件必须是未做任何修改的(这个可以打开补丁文件看一下删除的文件的日期是否和我们要打补丁的文件一样就可以了)。我之前就是因为修改了厂商给的源码所以打补丁的时间打不进去,会出错,后来找资料才明白不能改打补丁前的文件。

2、还有一个就是有的补丁要一个一个的打,那是补丁做成这样的,一般厂商给说明是否需要一个一个的打,还直接打最后一个版本的就OK了,但我认为一个一个的打的补丁要严谨些,因为它的每一个补丁表示了一次功能性的修改,这样每次都可以验证补丁的正确性了。


4、实例

a -- 制作补丁

        命令: diff -urN linux-3.4.2 linux-3.4.2-my  > linux-3.4.2-my.patch

        说明:

            当前路径为:./ 。

            该路径(./ )下有 linux-3.4.2 目录,其是linux-3.4.2的源码压缩包解压所得(linux-3.4.2源码未做任何修改的)。

            该路径(./ )下有 linux-3.4.2-my 目录,其是由linux-3.4.2的源码修改后,符合开发板正常使用的源码(根据linux-3.4.2源码修改后的)。

            生成 linux-3.4.2-my.patch 补丁文件。


b -- 打补丁

        命令: patch -p1 < ../linux-3.4.2-my.patch

        说明:

            当前路径为:./linux-3.4.2,进入到未做任何修改的linux-3.4.2的目录下执行patch命令

猜你喜欢

转载自blog.csdn.net/imilli/article/details/79916117