Linux系統生成patch和打patch
一、使用diff生成patch
1、創建兩個文件,test.c源文件和修改後的文件test_1.c
ubuntu:~/code/test/patch$ cat test.c
aa
bb
ubuntu:~/code/test/patch$ cat test_1.c
aa
11
22
bb
2、生成補丁
(1)、給單個文件生成補丁
diff -up test.c test_1.c > 01_test.patch
(2)、給多個文件
diff -uprN test test_1 > 01_test.patch
參數詳解:
-u 顯示有差異行的前後幾行(上下文), 默認是前後各3行, 這樣, patch中帶有更多的信息.
-p 顯示代碼所在的c函數的信息
-r 遞歸地對比一個目錄和它的所有子目錄(即整個目錄樹).
-N 如果某個文件缺少了, 就當作是空文件來對比. 如果不使用本選項, 當diff發現舊代碼或者新代碼缺少文件時, 只簡單的提示缺少文件. 如果使用本選項, 會將新添加的文件全新打印出來作爲新增的部分
二、使用patch打補丁
1、存在兩個文件,源文件test.c和patch文件01_test.patch
ubuntu:~/code/test/patch$ cat test.c
aa
bb
ubuntu:~/code/test/patch$ cat 01_test.patch
--- test.c 2018-07-20 15:48:43.694824855 +0800
+++ test_1.c 2018-07-20 15:49:08.650825272 +0800
@@ -1,2 +1,4 @@
aa
+11
+22
bb
生成的補丁中, 路徑信息包含了你的Linux源碼根目錄的名稱, 但其他人的源碼根目錄可能是其它名字, 所以, 打補丁時, 要進入你的Linux源碼根目錄, 並且告訴patch工具, 請忽略補丁中的路徑
patch test.c < 01_test.patch
patch -RE < 01_test.patch 取消patch對源文件的修改
patch -p1 < patch1.diff
p表示跳過幾級目錄,0標識不去掉爲全路徑,1標識去掉第一層路徑
注意:patch -p後面是不能帶負數 的。不使用p參數的時候,patch命令會 忽略 任何目錄,直接使用文件