git 生成patch和使用patch
囉嗦下:發現自己的blog被轉載了,不過沒有註明出處,有點痛並快樂著的感覺。這裡正式申明下:轉載請註明出處,感謝。如有商用目的請務必知會本人。
在android大環境下工作,遲早都會接觸到git工具,這裡說一下本地獲取修改補丁的幾種方式。
工作中用到的補丁大致可以分為兩種,一種是patch檔案,即補丁檔案拿過來利用某些命令將這個補丁打入當前程式碼中,另外一種是修改前和修改後的檔案對比包,這個對比包可以讓我們快速檢視到修改點的同時看到修改的上下文。先說說獲取修改前和修改後檔案的兩種常用方法。第一種:除錯完成程式碼之後,在當前倉庫下執行如下語句:
git stash;
就能恢復到修改前的狀態,得到修改檔案之後,再執行:
git stash pop;
這又恢復了修改之後的狀態了。如果你有多個倉庫需要管理,可以使用repo forall命令幫助執行。
再說說另外一種方法。有時候修改完程式碼之後,不想馬上就提交,可以另外其一個分支,在這個分支上提交,結束之後再切回原來的分支。一般常用命令如下:
repo start name . (注意name之後有一個".",表示當前工程。或者使用git checkout -b name 遠端分支名稱)
git commit -a
git checkout name (或者在新建一個分支)
這兩種方法一般本地團隊使用比較好。如果涉及到跨公司跨地域的交流,建議還是用下面的patch檔案方式。
個人理解android開發接觸到的patch,一般可以分為兩種,一種是UNIX下的patch,可以使用git diff或者其他UNIX的diff命令生成(本人只用過git diff命令,後面的看書有提到過但是自己木有用過),一種是git 工具生成的patch,也可以說是git專用的patch,使用git format-patch命令生成。先來看看git diff生成patch的過程。一般常用命令如下:
git diff > patch
git diff --cached > patch
git diff branchname --cached > patch
這個時候當前目錄下就會有一個patch檔案,這是一個非git環境也可以使用的patch。對於這種patch,在git上使用要用git apply命令,如下:
git apply patch
由於這是一個類似UNIX下更新檔案的操作,所以執行完上述操作之後,實際上是等於手動修改了檔案,還要做一些git commit之類的操作。另外請注意,git apply 是一個事務性操作的命令,也就是說,要麼所有補丁都打上去,要麼全部放棄。ProGit上說明在實際打補丁之前,可以先用git apply --check 檢視補丁是否能夠乾淨順利地應用到當前分支中:git apply --check patch,如果執行完該命令之後沒有任何輸出,表示我們可以順利採納該補丁,接下來就是git上的提交了。
在接著說說git format-patch生成的補丁,這是git專用的,也是日常工作中最常接觸到的補丁型別。常用命令如下:
1)兩個節點之間的提交: git format-patch 節點A 節點B
2)單個節點: git format-patch -1 節點A (-n就表示要生成幾個節點的提交)
3)最近一次提交節點的patch :git format-patch HEAD^ 依次類推……
使用git format-patch命令生成的patch檔案,包含了提交的附加資訊:比如作者,時間等。再次基礎上使用git am命令即可將此補丁應用到當前分支。注意應用完之後,你會發現當前分支多了一次提交記錄,並且有完整的資訊,而不是簡單的修改檔案。在對比一下,git diff 和git format-patch生成的patch一個重要不同之處,實際使用中會發現git diff一次只會生成一個patch檔案,不管差別了多少個提交,都是一個;而git format-patch是根據提交的節點來的,一個節點一個patch。
補充小技巧: 如果有額外資訊需要補充,但又不想放在提交訊息中說明以免搞亂了提交說明。可以編輯這些補丁檔案,在第一個“---” 行之前新增說明即可。這樣的資訊能閱讀,但在執行完git am命令之後該節點的提交資訊不回包含上述資訊。
相關文章
- 如何使用git 生成patch 和打入patchGit
- Patch檔案的生成和使用
- 使用 git add -p 整理 patchGit
- Git 打補丁– patch 和 diff 的使用(詳細)Git
- Git 打補丁-- patch 和 diff 的使用(詳細)Git
- 關於Eclipse生成和匯入Patch檔案.Eclipse
- 使用adpatch打patch時log檔案生成目錄
- 活用 git apply 合入 patch 補丁GitAPP
- Diff and Patch
- LINUX 的patch 製作,及打patchLinux
- 打 patch 報錯:corrupt patch at line 36
- [原創]How to send patch files by git send-mailGitAI
- aix打patchAI
- OAF and Jdev Patchdev
- 使用GraphHttpClient呼叫Microsoft Graph介面 - PATCHHTTPclientROS
- RAC和ASM環境下打patchASM
- 2.3.3.4 Application PatchAPP
- oracle安裝patchOracle
- Oracle ebs patch typeOracle
- REST:使用PATCH進行部分更新 - mscharhagREST
- patch檔案的製作與使用
- 如何使用diff 和 patch 命令對檔案進行協作?
- 十分鐘學習diff和patch
- 使用opatch 命令檢視oracle patch 狀況Oracle
- Linux初學者Patch使用指南(轉)Linux
- 如何編寫 iOS PatchiOS
- oracle 10g patchOracle 10g
- Oracle 11.2.0.2.0 patch setOracle
- 如何得到Oracle Patch (zt)Oracle
- check database patch with opatch toolsDatabase
- 【mos 1265700.1】Oracle Patch Assurance - Data Guard Standby-First Patch ApplyOracleAPP
- iOS遠端hot patch的優點和風險iOS
- oracle小版本升級patch過程和分析Oracle
- ORACLE PATCH下載目錄Oracle
- oracle 10g em patchOracle 10g
- Oracle EBS AD Merge PatchOracle
- openGauss 支援SQL-PATCHSQL
- 使用動態規劃 實現字元級Diff & Patch動態規劃字元