生成和打上patch的方法
阿新 • • 發佈:2019-01-29
首先生成patch需要有兩個工程,一個修改前的A工程,一個修改後的B工程。
使用linux命令diff就可以生成patch了。格式如下:
diff -Naur path/to/A_Project path/to/B_Project > Project.patch
-N 選項確保補丁檔案將正確地處理已經建立或刪除檔案的情況。
-a 將所有檔案都當作文字檔案處理。
-u 輸出每個修改前後的3行,也可以用-u5等指定輸出更多上下文。
-r 遞迴。設定後diff會將兩個不同版本原始碼目錄中的所有對應檔案全部都進行一次比較,包括子目錄檔案。
生成patch以後,在修改前A工程根目錄下使用patch命令打上patch。
$ cd path/to/A_Project
$ patch -p1 < Project.patch
-p Num 忽略幾層資料夾
為了解釋 -p 引數,需要看看如下patch檔案片段:
--- old/modules/pcitable Mon Sep 27 11:03:56 1999 +++ new/modules/pcitable Tue Dec 19 20:05:41 2000
如果使用引數 -p0,那就表示從當前目錄找一個叫做old的資料夾,再在它下面尋找 modules/pcitable 檔案來執行patch操作。
而如果使用引數 -p1,那就表示忽略第一層目錄(即不管old),從當前目錄尋找 modules 的資料夾,再在它下面找pcitable。
如果要取消補丁做出的更改,恢復舊版本,在A工程的根目錄下執行以下命令,A工程就會恢復成沒有打patch的樣子:
$ patch -RE -p0 < Project.patch
由Git管理的工程處理patch的方法:
【生成patch】
分支master 上是沒修改前的,分支patch 上是修改以後的打patch的。
1. 先切換到 patch分支
git checkout patch
2. 生成patch
git format-patch -M master
會生成一個檔名如:0002-Release-version-1.4.6.patch 的patch檔案
【合併patch】
拿到patch以後,執行下面的命令:
git am 0002-Release-version-1.4.6.patch
如果不想直接commit,那麼可以用下面這個命令打patch:
patch -p1 < 0002-Release-version-1.4.6.patch
然後手動commit。