Linux 补丁

原文出处:  http://blog.chinaunix.net/uid-22235894-id-1782003.htmlhtml

 

作补丁:diff -Naurp --exclude='.svn' orig.dir new.dir > dest.patchlinux

 
作补丁:diff -Naurp orig.dir new.dir > dest.patch
打补丁: cd orig.dir
       patch -p1 < ../dest.patch
 
我对DebianPackage-1.0修改,改后为DebianPackage-1.1
打包时要先清除编译生成的文件,运行debclean
#cd ~/DebianPackage-1.0
#debclean
#cd ~/DebianPackage-1.1
#debclean
#cd
#diff -Naurp DebianPackage-1.0 DebianPackage-1.1 > DebianPackage-1.1.patch
 
打补丁:
a
#cd DebianPackage-1.0
#patch -p1 < ../DebianPackage-1.1.patch
b
#patch -p2 -d DebianPackage-1.0 < DebianPackage-1.1.patch

转:

经过diff工具生成补丁, patch工具打上补丁.ide

在使用diff以前, 你须要保留一份未修改过的源码, 而后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须保留原来的文件名, 例如, 若是你修改源码中的a.c文件, 那么, 修改后的文件仍是名为a.c, 在修改以前你能够复制a.c为a.orig.c进行备份.svn

diff命令必须在整个Linux源码的根目录的上一级目录中执行.函数

1. 为单个文件生成补丁工具

diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.cui

这条命令会产生相似以下的输出, 你将它重定向到一个文件中, 这个文件就是patch.spa

--- linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800.net

+++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800unix

@@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)

参数详解:

-u 显示有差别行的先后几行(上下文), 默认是先后各3行, 这样, patch中带有更多的信息.

-p 显示代码所在的c函数的信息.

2. 为多个文件生成补丁

diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/

这条命令对比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/两个目录的源码差别. 不像只须要单个文件, 若是修改多个文件, 那么就须要拷贝整个Linux源码树.

参数详解:

-r 递归地对比一个目录和它的全部子目录(即整个目录树).

-N 若是某个文件缺乏了, 就看成是空文件来对比. 若是不使用本选项, 当diff发现旧代码或者新代码缺乏文件时, 只简单的提示缺乏文件. 若是使用本选项, 会将新添加的文件全新打印出来做为新增的部分.

3. 打补丁

生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其余人的源码根目录多是其它名字, 因此, 打补丁时, 要进入你的Linux源码根目录, 而且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).

patch -p1 < patch1.diff

相关文章
相关标签/搜索