不過在git中,我們沒有必要直接使用diff和patch來做補丁,這樣做既危險又麻煩。git提供了兩種簡單的patch方案。一是用git diff生成的標準patch,二是git format-patch生成的git專用patch
。我們可以首先用git diff製作乙個patch。本文示例的工作目錄裡最初有乙個檔案a,內容是「this is the file a.」,放置在master分支中。為了修改**,我們一般的做法是建立乙個新分支:
sweetdum@sweetdum-asus:~/gitex$ git branch fix
sweetdum@sweetdum-asus:~/gitex$ git checkout fix
switched to branch 'fix'
接下來我們在a檔案裡面追加一行,然後執行git diff。
sweetdum@sweetdum-asus:~/gitex$ echo 'fix!!
!'>;>a
sweetdum@sweetdum-asus:~/gitex$ git diff
diff --git a/a b/a
index 4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
this is the file a.
+fix!!!
我們看到了git diff的輸出,這是乙個非常典型的patch式diff。這樣我們可以直接把這個輸出變為乙個patch:
sweetdum@sweetdum-asus:~/gitex$ git commit -a -m "fix"
[fix b88c46b] fix
1 files changed, 1 insertions(+), 0 deletions(-)
sweetdum@sweetdum-asus:~/gitex$ git diff master > patch
sweetdum@sweetdum-asus:~/gitex$ git checkout master
switched to branch 'master'
看,現在我們在patch分支中應用了這個補丁,我們可以把patch分支和fix比對一下,結果肯定是什麼也沒有,說明patch分支和fix分支完全一樣。patch應用成功。即使有多個檔案git diff 也能生成乙個patch。
我們同樣用上面那個例子的工作目錄,這次,我們在fix分支中的a新增了新行之後,用git format-patch生成乙個patch。
sweetdum@sweetdum-asus:~/gitex$ git checkout fix
switched to branch 'fix'
sweetdum@sweetdum-asus:~/gitex$ echo 'fix!!!'>>a
sweetdum@sweetdum-asus:~/gitex$ git commit -a -m "fix1"
[fix 6991743] fix1
1 files changed, 1 insertions(+), 0 deletions(-)
sweetdum@sweetdum-asus:~/gitex$ git format-patch -m master
0001-fix1.patch
git format-patch的-m選項表示這個patch要和那個分支比對。現在它生成了乙個patch檔案,我們看看那是什麼:
sweetdum@sweetdum-asus:~/gitex$ cat 0001-fix1.patch
from 6991743354857c9a6909a253e859e886165b0d90 mon sep 17 00:00:00 2001
from: sweetdumplings
date: mon, 29 aug 2011 14:06:12 +0800
subject: [patch] fix1
---a | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/a b/a
index 4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
this is the file a.
+fix!!!
--1.7.4.1
看,這次多了好多東西,不僅有diff的資訊,還有提交者,時間等等,仔細一看你會發現,這是個e-mail的檔案,你可以直接傳送它!這種patch,我們要用git am來應用。
在提交了補丁之後,我們可以再看看目前檔案a的情況:
sweetdum@sweetdum-asus:~/gitex$ cat a
this is the file a.
fix!!!
果然,多了乙個fix!!!
不過要注意的是,如果master與fix分支中間有多次提交,它會針對每次提交生成乙個patch。
提交補丁到郵件列表:
sweetdum@sweetdum-asus:~/gitex$ git send-email --to --cc
注意:git send-email在很多機器上沒有預設安裝,需要進行手動安裝
總結一下,利用git format-patch製作補丁大概有以下步驟:1)新建分支 2)在新建的分支上進行相關修改 3)提交修改到本地資料庫 4)針對上乙個支生成補丁5)另外新建分支,驗證補丁6)提交補丁到郵件列表
如何利用git製作和提交patch
不過在git中,我們沒有必要直接使用diff和patch來做補丁,這樣做既危險又麻煩。git提供了兩種簡單的patch方案。一是用git diff生成的標準patch,二是git format patch生成的git專用patch 我們可以首先用git diff製作乙個patch。本文示例的工作目錄...
網線如何製作和如何使用?
網線製作是搞網路的人的必修課,也是最為基礎的實戰專案。網線製作方法有很多,我們在此簡單的製作一下現在出現最多的rj45通用8針網線製作方法。網線做法有兩種國際標準,分別是eia tia568a和eia tia568b。兩種標準對應的線序如下 正確檢視網線線序的方法為 水晶頭彈片朝下,且有水晶彈片的一...
patch和git製作和應用補丁
1 處理單個檔案補丁的方法 產生補丁 diff un from file to file to file.patch 打補丁 patch p0 to file.patch 取消補丁 patch re p0 to file.patch 2 對整個資料夾打補丁的情況 產生補丁 diff unr from...