Linux系統生成patch和打patch

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命令會 忽略 任何目錄,直接使用文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章