如何使用patch命令打補丁
阿新 • • 發佈:2018-12-20
有時候因為條件限制,我們不能使用git倉庫進行程式碼的更新工作。
例如你需要更新伺服器的程式碼,一般的生產環境上面的程式碼是某個版本的程式碼而非整個git倉庫。
當你進行了一些開發,你需要將你的程式碼部署到伺服器上面,進行一系列測試。
這時,使用patch是一個不錯的辦法。
- 確保你的伺服器上安裝了
patch
命令。如果沒有安裝,在聯網狀態下安裝一下也就幾分鐘的事。 - 在你本地生成patch檔案。在你的git倉庫中,生成patch 檔案有兩種方法。
- 使用
git format-patch commit_id
。這條命令會把從HEAD到你指定的commit_id
的所有提交都單獨生成一個patch檔案。這種情況下生成的patch 檔案只適用於伺服器上要更新的 程式碼也是一個git倉庫裡的程式碼。 - 使用
git diff master (or commit_id) > test.patch
。這條命令生成的patch檔案可以在linux系統上直接用patch命令打到程式碼裡,也就是所謂的通用patch。這裡master就是master分支;也可以是你想對比的版本號。比如HEAD^
,就會把你的最新程式碼和HEAD^
這個版本進行比較,並生成patch檔案。
- 使用
- 將你的patch檔案拷貝到你的伺服器工程目錄中,使用命令
patch -pn < patch_file
n
的意思就是忽略掉幾個/
。例如:
如果你把這個patch 檔案放到你伺服器上的--- a/aaa/bbb/ccc.py +++ b/aaa/bbb/ccc.py
../aaa
/
就可以了,也就是你應該使用命令:patch -p1 < patch_file
注意
應用patch到時候會有一些輸出,注意看是否有錯誤資訊。
另外,應用完成以後記得查詢一下.rej
檔案,如果有這種檔案表示應用失敗,一般的原因就是程式碼衝突。
不要慌,開啟這個.rej
以及相應的.orig
檔案對比一下你就知道衝突在哪了,解決掉衝突就可以了。
撤銷patch
將打上的補丁給恢復回去:
patch -R pn < patch_file