linux打patch簡單示例


  在項目中,有些模塊是開源的,沒有源碼或者不能改動源碼,想要修復、優化里面的Bug,這時就需要用到patch了。

1.    生成patch  

  制作補丁有兩種法法,diff和quilt。

1.1   diff方法制作patch

1.1.1     示例

l  第一步,創建兩個文件,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

l  第二步,生成補丁,diff -u test.c test_1.c > 01_test.patch

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

 

1.1.2     diff命令

簡 單的說,diff的功能就是用來比較兩個文件的不同,然后記錄下來,也就是所謂的diff補丁。

diff [options] from-file to-file

from-file  源文件

to-file       根據源文件修改后的文件

option:

-u 顯示有差異行的前后幾行(上下文), 默認是前后各3行, 這樣, patch中帶有更多的信息.

-p顯示代碼所在的c函數的信息

-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。

-a逐行比較文本文件

-r比較子目錄中的文件

1.2   quilt方式制作patch

quilt是一個制作和應用補丁的工具,它適合於管理較多補丁。

1.2.1     示例

l  第一步,quilt new 02_test.patch新加一個補丁文件

l  第二步,修改文件quilt edit test.c,進入文本框進行文件編輯

aa

11

22

bb

^G Get Help           ^O WriteOut           ^R Read File          ^Y Prev Page          ^K Cut Text           ^C Cur Pos

^X Exit               ^J Justify            ^W Where Is           ^V Next Page          ^U UnCut Text         ^T To Spell

l  第三步,quilt refresh將改動保存到patch中。

當前目錄下增量了pathc目錄,補丁文件02_test.patch即放在了改目錄下。

ubuntu:~/code/test/patch$ cat patches/02_test.patch

Index: patch/test.c

===================================================================

--- patch.orig/test.c   2018-07-20 15:48:43.694824855 +0800

+++ patch/test.c        2018-07-20 16:06:31.490842723 +0800

@@ -1,2 +1,4 @@

 aa

+11

+22

 bb

 

1.2.2     quilt命令

quilt top      查看最近的一個patch

quilt add {files}    關聯文件

quilt remove files   取消關聯文件,是add相反的操作

quilt diff    查看對比修改的內容

quilt files       查看當前patch關聯的文件

quilt series      查看左右的patch

quilt pop     回退剛才文件的改動

2.    打patch

2.1   示例

l  第一步,存在兩個文件,源文件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

 

l  第二步,打patch,patch test.c < 01_test.patch,查看源文件,已經有了補丁上的修改。

ubuntu:~/code/test/patch$ cat test.c

aa

11

22

bb

 

2.2   命令

patch -RE < 01_test.patch 取消patch對源文件的修改

patch -p1 < patch1.diff

p表示跳過幾級目錄,0標識不去掉為全路徑,1標識去掉第一層路徑

注意:patch -p后面是不能帶負數 的。不使用p參數的時候,patch命令會 忽略 任何目錄,直接使用文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM