请参考链接:https://www.cnblogs.com/wangqiguo/p/5793448.html
diff命令单中模式
1. normal模式
diff file1.txt file2.txt
2. context模式
diff file1.txt file2.txt -c
3. Unified模式
diff file1.txt file2.txt -u
基本命令语法:
patch [-R] {-p(n)} [--dry-run] < patch_file_name
p:为path的缩写。
n:指将patch文件中的path第n条’/’及其左边部分取消。
-R:卸载patch包。
--dry-run:尝试patch软件,并不真正修改软件。
在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须保留原来的文件名, 例如, 如果你修改源码中的a.c文件, 那么, 修改后的文件还是名为a.c, 在修改之前你可以复制a.c为a.orig.c进行备份.
1.为单个文件生成补丁
1 $ diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c > patch
这条命令会产生类似如下的输出, 你将它重定向到一个文件中, 这个文件就是patch.
1 diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800 2 +++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800 3 @@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)
2.为多个文件生成补丁
1 $ diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/ > patch
这条命令对比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/两个目录下的所有源码差异.
3.打补丁
1 $ patch -p1 < patch1.diff
diff命令必须在整个Linux源码的根目录的上一级目录中执行.
4. 示例
1 $ diff -uparN linux-2.6.31.3 linux-2.6.31.3_1/ > mypatch 2 $ cd linux-2.6.31.3 3 $ patch -p1 < mypatch
注意点:
1. 打patch时,参数-p1, 是1而不是l. 为什么忽略第一级目录,因为工程的下面树状结构相同,但是工程名未必相同,所以打patch时候可以通过p1来避免这个问题。这个可以通过查看patch内容来决定具体执行patch的路径。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux diff命令详解 和 patch命令 - Python技术站