1390f915aSHu Haowen.. SPDX-License-Identifier: GPL-2.0 2390f915aSHu Haowen 3390f915aSHu Haowen.. _tw_submittingpatches: 4390f915aSHu Haowen 5390f915aSHu Haowen.. include:: ../disclaimer-zh_TW.rst 6390f915aSHu Haowen 7390f915aSHu Haowen:Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 8390f915aSHu Haowen 9390f915aSHu Haowen譯者:: 10390f915aSHu Haowen 11390f915aSHu Haowen 中文版維護者: 鍾宇 TripleX Chung <xxx.phy@gmail.com> 12390f915aSHu Haowen 中文版翻譯者: 鍾宇 TripleX Chung <xxx.phy@gmail.com> 13390f915aSHu Haowen 時奎亮 Alex Shi <alex.shi@linux.alibaba.com> 14390f915aSHu Haowen 中文版校譯者: 李陽 Li Yang <leoyang.li@nxp.com> 15390f915aSHu Haowen 王聰 Wang Cong <xiyou.wangcong@gmail.com> 16*44a54e25SHu Haowen 胡皓文 Hu Haowen <src.res.211@gmail.com> 17390f915aSHu Haowen 18390f915aSHu Haowen 19390f915aSHu Haowen如何讓你的改動進入內核 20390f915aSHu Haowen====================== 21390f915aSHu Haowen 22390f915aSHu Haowen對於想要將改動提交到 Linux 內核的個人或者公司來說,如果不熟悉「規矩」, 23390f915aSHu Haowen提交的流程會讓人畏懼。本文檔收集了一系列建議,這些建議可以大大的提高你 24390f915aSHu Haowen的改動被接受的機會. 25390f915aSHu Haowen 26390f915aSHu Haowen以下文檔含有大量簡潔的建議, 具體請見: 27390f915aSHu Haowen:ref:`Documentation/process <development_process_main>` 28390f915aSHu Haowen同樣,:ref:`Documentation/translations/zh_TW/process/submit-checklist.rst <tw_submitchecklist>` 290582591cSAlex Shi給出在提交代碼前需要檢查的項目的列表。 30390f915aSHu Haowen 31390f915aSHu Haowen其中許多步驟描述了Git版本控制系統的默認行爲;如果您使用Git來準備補丁, 32390f915aSHu Haowen您將發現它爲您完成的大部分機械工作,儘管您仍然需要準備和記錄一組合理的 33390f915aSHu Haowen補丁。一般來說,使用git將使您作爲內核開發人員的生活更輕鬆。 34390f915aSHu Haowen 35390f915aSHu Haowen 36390f915aSHu Haowen0) 獲取當前源碼樹 37390f915aSHu Haowen----------------- 38390f915aSHu Haowen 39390f915aSHu Haowen如果您沒有一個可以使用當前內核原始碼的存儲庫,請使用git獲取一個。您將要 40390f915aSHu Haowen從主線存儲庫開始,它可以通過以下方式獲取:: 41390f915aSHu Haowen 42390f915aSHu Haowen git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 43390f915aSHu Haowen 44390f915aSHu Haowen但是,請注意,您可能不希望直接針對主線樹進行開發。大多數子系統維護人員運 45390f915aSHu Haowen行自己的樹,並希望看到針對這些樹準備的補丁。請參見MAINTAINERS文件中子系 46390f915aSHu Haowen統的 **T:** 項以查找該樹,或者簡單地詢問維護者該樹是否未在其中列出。 47390f915aSHu Haowen 48390f915aSHu Haowen仍然可以通過tarballs下載內核版本(如下一節所述),但這是進行內核開發的 49390f915aSHu Haowen一種困難的方式。 50390f915aSHu Haowen 51390f915aSHu Haowen1) "diff -up" 52390f915aSHu Haowen------------- 53390f915aSHu Haowen 54390f915aSHu Haowen使用 "diff -up" 或者 "diff -uprN" 來創建補丁。 55390f915aSHu Haowen 56390f915aSHu Haowen所有內核的改動,都是以補丁的形式呈現的,補丁由 diff(1) 生成。創建補丁的 57390f915aSHu Haowen時候,要確認它是以 "unified diff" 格式創建的,這種格式由 diff(1) 的 '-u' 58390f915aSHu Haowen參數生成。而且,請使用 '-p' 參數,那樣會顯示每個改動所在的C函數,使得 59390f915aSHu Haowen產生的補丁容易讀得多。補丁應該基於內核原始碼樹的根目錄,而不是裡邊的任 60390f915aSHu Haowen何子目錄。 61390f915aSHu Haowen 62390f915aSHu Haowen爲一個單獨的文件創建補丁,一般來說這樣做就夠了:: 63390f915aSHu Haowen 64390f915aSHu Haowen SRCTREE=linux 65390f915aSHu Haowen MYFILE=drivers/net/mydriver.c 66390f915aSHu Haowen 67390f915aSHu Haowen cd $SRCTREE 68390f915aSHu Haowen cp $MYFILE $MYFILE.orig 69390f915aSHu Haowen vi $MYFILE # make your change 70390f915aSHu Haowen cd .. 71390f915aSHu Haowen diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch 72390f915aSHu Haowen 73390f915aSHu Haowen爲多個文件創建補丁,你可以解開一個沒有修改過的內核原始碼樹,然後和你自 74390f915aSHu Haowen己的代碼樹之間做 diff 。例如:: 75390f915aSHu Haowen 76390f915aSHu Haowen MYSRC=/devel/linux 77390f915aSHu Haowen 78390f915aSHu Haowen tar xvfz linux-3.19.tar.gz 79390f915aSHu Haowen mv linux-3.19 linux-3.19-vanilla 80390f915aSHu Haowen diff -uprN -X linux-3.19-vanilla/Documentation/dontdiff \ 81390f915aSHu Haowen linux-3.19-vanilla $MYSRC > /tmp/patch 82390f915aSHu Haowen 83390f915aSHu Haowen"dontdiff" 是內核在編譯的時候產生的文件的列表,列表中的文件在 diff(1) 84390f915aSHu Haowen產生的補丁里會被跳過。 85390f915aSHu Haowen 86390f915aSHu Haowen確定你的補丁里沒有包含任何不屬於這次補丁提交的額外文件。記得在用diff(1) 87390f915aSHu Haowen生成補丁之後,審閱一次補丁,以確保準確。 88390f915aSHu Haowen 89390f915aSHu Haowen如果你的改動很散亂,你應該研究一下如何將補丁分割成獨立的部分,將改動分 90390f915aSHu Haowen割成一系列合乎邏輯的步驟。這樣更容易讓其他內核開發者審核,如果你想你的 91390f915aSHu Haowen補丁被接受,這是很重要的。請參閱: 92390f915aSHu Haowen:ref:`tw_split_changes` 93390f915aSHu Haowen 94390f915aSHu Haowen如果你用 ``git`` , ``git rebase -i`` 可以幫助你這一點。如果你不用 ``git``, 95390f915aSHu Haowen``quilt`` <https://savannah.nongnu.org/projects/quilt> 另外一個流行的選擇。 96390f915aSHu Haowen 97390f915aSHu Haowen.. _tw_describe_changes: 98390f915aSHu Haowen 99390f915aSHu Haowen2) 描述你的改動 100390f915aSHu Haowen--------------- 101390f915aSHu Haowen 102390f915aSHu Haowen描述你的問題。無論您的補丁是一行錯誤修復還是5000行新功能,都必須有一個潛在 103390f915aSHu Haowen的問題激勵您完成這項工作。讓審稿人相信有一個問題值得解決,讓他們讀完第一段 104390f915aSHu Haowen是有意義的。 105390f915aSHu Haowen 106390f915aSHu Haowen描述用戶可見的影響。直接崩潰和鎖定是相當有說服力的,但並不是所有的錯誤都那麼 107390f915aSHu Haowen明目張胆。即使在代碼審查期間發現了這個問題,也要描述一下您認爲它可能對用戶產 108390f915aSHu Haowen生的影響。請記住,大多數Linux安裝運行的內核來自二級穩定樹或特定於供應商/產品 109390f915aSHu Haowen的樹,只從上游精選特定的補丁,因此請包含任何可以幫助您將更改定位到下游的內容: 110390f915aSHu Haowen觸發的場景、DMESG的摘錄、崩潰描述、性能回歸、延遲尖峯、鎖定等。 111390f915aSHu Haowen 112390f915aSHu Haowen量化優化和權衡。如果您聲稱在性能、內存消耗、堆棧占用空間或二進位大小方面有所 113390f915aSHu Haowen改進,請包括支持它們的數字。但也要描述不明顯的成本。優化通常不是免費的,而是 114390f915aSHu Haowen在CPU、內存和可讀性之間進行權衡;或者,探索性的工作,在不同的工作負載之間進 115390f915aSHu Haowen行權衡。請描述優化的預期缺點,以便審閱者可以權衡成本和收益。 116390f915aSHu Haowen 117390f915aSHu Haowen一旦問題建立起來,就要詳細地描述一下您實際在做什麼。對於審閱者來說,用簡單的 118390f915aSHu Haowen英語描述代碼的變化是很重要的,以驗證代碼的行爲是否符合您的意願。 119390f915aSHu Haowen 120390f915aSHu Haowen如果您將補丁描述寫在一個表單中,這個表單可以很容易地作爲「提交日誌」放入Linux 121390f915aSHu Haowen的原始碼管理系統git中,那麼維護人員將非常感謝您。見 :ref:`tw_explicit_in_reply_to`. 122390f915aSHu Haowen 123390f915aSHu Haowen每個補丁只解決一個問題。如果你的描述開始變長,這就表明你可能需要拆分你的補丁。 124390f915aSHu Haowen請見 :ref:`tw_split_changes` 125390f915aSHu Haowen 126390f915aSHu Haowen提交或重新提交修補程序或修補程序系列時,請包括完整的修補程序說明和理由。不要 127390f915aSHu Haowen只說這是補丁(系列)的第幾版。不要期望子系統維護人員引用更早的補丁版本或引用 128390f915aSHu HaowenURL來查找補丁描述並將其放入補丁中。也就是說,補丁(系列)及其描述應該是獨立的。 129390f915aSHu Haowen這對維護人員和審查人員都有好處。一些評審者可能甚至沒有收到補丁的早期版本。 130390f915aSHu Haowen 131390f915aSHu Haowen描述你在命令語氣中的變化,例如「make xyzzy do frotz」而不是「[這個補丁]make 132390f915aSHu Haowenxyzzy do frotz」或「[我]changed xyzzy to do frotz」,就好像你在命令代碼庫改變 133390f915aSHu Haowen它的行爲一樣。 134390f915aSHu Haowen 135390f915aSHu Haowen如果修補程序修復了一個記錄的bug條目,請按編號和URL引用該bug條目。如果補丁來 136390f915aSHu Haowen自郵件列表討論,請給出郵件列表存檔的URL;使用帶有 ``Message-ID`` 的 137a9d85efbSThorsten Leemhuishttps://lore.kernel.org/ 重定向,以確保連結不會過時。 138390f915aSHu Haowen 139390f915aSHu Haowen但是,在沒有外部資源的情況下,儘量讓你的解釋可理解。除了提供郵件列表存檔或 140390f915aSHu Haowenbug的URL之外,還要總結需要提交補丁的相關討論要點。 141390f915aSHu Haowen 142390f915aSHu Haowen如果您想要引用一個特定的提交,不要只引用提交的 SHA-1 ID。還請包括提交的一行 143390f915aSHu Haowen摘要,以便於審閱者了解它是關於什麼的。例如:: 144390f915aSHu Haowen 145390f915aSHu Haowen Commit e21d2170f36602ae2708 ("video: remove unnecessary 146390f915aSHu Haowen platform_set_drvdata()") removed the unnecessary 147390f915aSHu Haowen platform_set_drvdata(), but left the variable "dev" unused, 148390f915aSHu Haowen delete it. 149390f915aSHu Haowen 150390f915aSHu Haowen您還應該確保至少使用前12位 SHA-1 ID. 內核存儲庫包含*許多*對象,使與較短的ID 151390f915aSHu Haowen發生衝突的可能性很大。記住,即使現在不會與您的六個字符ID發生衝突,這種情況 152390f915aSHu Haowen可能五年後改變。 153390f915aSHu Haowen 154390f915aSHu Haowen如果修補程序修復了特定提交中的錯誤,例如,使用 ``git bisct`` ,請使用帶有前 155390f915aSHu Haowen12個字符SHA-1 ID 的"Fixes:"標記和單行摘要。爲了簡化不要將標記拆分爲多個, 156390f915aSHu Haowen行、標記不受分析腳本「75列換行」規則的限制。例如:: 157390f915aSHu Haowen 158390f915aSHu Haowen Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed") 159390f915aSHu Haowen 160390f915aSHu Haowen下列 ``git config`` 設置可以添加讓 ``git log``, ``git show`` 漂亮的顯示格式:: 161390f915aSHu Haowen 162390f915aSHu Haowen [core] 163390f915aSHu Haowen abbrev = 12 164390f915aSHu Haowen [pretty] 165390f915aSHu Haowen fixes = Fixes: %h (\"%s\") 166390f915aSHu Haowen 167390f915aSHu Haowen.. _tw_split_changes: 168390f915aSHu Haowen 169390f915aSHu Haowen3) 拆分你的改動 170390f915aSHu Haowen--------------- 171390f915aSHu Haowen 172390f915aSHu Haowen將每個邏輯更改分隔成一個單獨的補丁。 173390f915aSHu Haowen 174390f915aSHu Haowen例如,如果你的改動里同時有bug修正和性能優化,那麼把這些改動拆分到兩個或 175390f915aSHu Haowen者更多的補丁文件中。如果你的改動包含對API的修改,並且修改了驅動程序來適 176390f915aSHu Haowen應這些新的API,那麼把這些修改分成兩個補丁。 177390f915aSHu Haowen 178390f915aSHu Haowen另一方面,如果你將一個單獨的改動做成多個補丁文件,那麼將它們合併成一個 179390f915aSHu Haowen單獨的補丁文件。這樣一個邏輯上單獨的改動只被包含在一個補丁文件里。 180390f915aSHu Haowen 181390f915aSHu Haowen如果有一個補丁依賴另外一個補丁來完成它的改動,那沒問題。簡單的在你的補 182390f915aSHu Haowen丁描述里指出「這個補丁依賴某補丁」就好了。 183390f915aSHu Haowen 184390f915aSHu Haowen在將您的更改劃分爲一系列補丁時,要特別注意確保內核在系列中的每個補丁之後 185390f915aSHu Haowen都能正常構建和運行。使用 ``git bisect`` 來追蹤問題的開發者可能會在任何時 186390f915aSHu Haowen候分割你的補丁系列;如果你在中間引入錯誤,他們不會感謝你。 187390f915aSHu Haowen 188390f915aSHu Haowen如果你不能將補丁濃縮成更少的文件,那麼每次大約發送出15個,然後等待審查 189390f915aSHu Haowen和集成。 190390f915aSHu Haowen 191390f915aSHu Haowen4) 檢查你的更改風格 192390f915aSHu Haowen------------------- 193390f915aSHu Haowen 194390f915aSHu Haowen檢查您的補丁是否存在基本樣式衝突,詳細信息可在 195390f915aSHu Haowen:ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>` 196390f915aSHu Haowen中找到。如果不這樣做,只會浪費審稿人的時間,並且會導致你的補丁被拒絕,甚至 197390f915aSHu Haowen可能沒有被閱讀。 198390f915aSHu Haowen 199390f915aSHu Haowen一個重要的例外是在將代碼從一個文件移動到另一個文件時——在這種情況下,您不應 200390f915aSHu Haowen該在移動代碼的同一個補丁中修改移動的代碼。這清楚地描述了移動代碼和您的更改 201390f915aSHu Haowen的行爲。這大大有助於審查實際差異,並允許工具更好地跟蹤代碼本身的歷史。 202390f915aSHu Haowen 203390f915aSHu Haowen在提交之前,使用補丁樣式檢查程序檢查補丁(scripts/check patch.pl)。不過, 204390f915aSHu Haowen請注意,樣式檢查程序應該被視爲一個指南,而不是作爲人類判斷的替代品。如果您 205390f915aSHu Haowen的代碼看起來更好,但有違規行爲,那麼最好不要使用它。 206390f915aSHu Haowen 207390f915aSHu Haowen檢查者報告三個級別: 208390f915aSHu Haowen 209390f915aSHu Haowen - ERROR:很可能出錯的事情 210390f915aSHu Haowen - WARNING:需要仔細審查的事項 211390f915aSHu Haowen - CHECK:需要思考的事情 212390f915aSHu Haowen 213390f915aSHu Haowen您應該能夠判斷您的補丁中存在的所有違規行爲。 214390f915aSHu Haowen 215390f915aSHu Haowen5) 選擇補丁收件人 216390f915aSHu Haowen----------------- 217390f915aSHu Haowen 218390f915aSHu Haowen您應該總是在任何補丁上複製相應的子系統維護人員,以獲得他們維護的代碼;查看 219390f915aSHu Haowen維護人員文件和原始碼修訂歷史記錄,以了解這些維護人員是誰。腳本 220390f915aSHu Haowenscripts/get_Maintainer.pl在這個步驟中非常有用。如果您找不到正在工作的子系統 221390f915aSHu Haowen的維護人員,那麼Andrew Morton(akpm@linux-foundation.org)將充當最後的維護 222390f915aSHu Haowen人員。 223390f915aSHu Haowen 224390f915aSHu Haowen您通常還應該選擇至少一個郵件列表來接收補丁集的。linux-kernel@vger.kernel.org 225390f915aSHu Haowen作爲最後一個解決辦法的列表,但是這個列表上的體積已經引起了許多開發人員的拒絕。 226390f915aSHu Haowen在MAINTAINERS文件中查找子系統特定的列表;您的補丁可能會在那裡得到更多的關注。 227390f915aSHu Haowen不過,請不要發送垃圾郵件到無關的列表。 228390f915aSHu Haowen 229390f915aSHu Haowen許多與內核相關的列表託管在vger.kernel.org上;您可以在 230390f915aSHu Haowenhttp://vger.kernel.org/vger-lists.html 上找到它們的列表。不過,也有與內核相關 231390f915aSHu Haowen的列表託管在其他地方。 232390f915aSHu Haowen 233390f915aSHu Haowen不要一次發送超過15個補丁到vger郵件列表!!!! 234390f915aSHu Haowen 235390f915aSHu HaowenLinus Torvalds 是決定改動能否進入 Linux 內核的最終裁決者。他的 e-mail 236390f915aSHu Haowen地址是 <torvalds@linux-foundation.org> 。他收到的 e-mail 很多,所以一般 237390f915aSHu Haowen的說,最好別給他發 e-mail。 238390f915aSHu Haowen 239390f915aSHu Haowen如果您有修復可利用安全漏洞的補丁,請將該補丁發送到 security@kernel.org。對於 240390f915aSHu Haowen嚴重的bug,可以考慮短期暫停以允許分銷商向用戶發布補丁;在這種情況下,顯然不應 241390f915aSHu Haowen將補丁發送到任何公共列表。 242390f915aSHu Haowen 243390f915aSHu Haowen修復已發布內核中嚴重錯誤的補丁程序應該指向穩定版維護人員,方法是放這樣的一行:: 244390f915aSHu Haowen 245390f915aSHu Haowen Cc: stable@vger.kernel.org 246390f915aSHu Haowen 247390f915aSHu Haowen進入補丁的簽准區(注意,不是電子郵件收件人)。除了這個文件之外,您還應該閱讀 248390f915aSHu Haowen:ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>` 249390f915aSHu Haowen 250390f915aSHu Haowen但是,請注意,一些子系統維護人員希望得出他們自己的結論,即哪些補丁應該被放到 251390f915aSHu Haowen穩定的樹上。尤其是網絡維護人員,不希望看到單個開發人員在補丁中添加像上面這樣 252390f915aSHu Haowen的行。 253390f915aSHu Haowen 254390f915aSHu Haowen如果更改影響到用戶和內核接口,請向手冊頁維護人員(如維護人員文件中所列)發送 255390f915aSHu Haowen手冊頁補丁,或至少發送更改通知,以便一些信息進入手冊頁。還應將用戶空間API 256390f915aSHu Haowen更改複製到 linux-api@vger.kernel.org。 257390f915aSHu Haowen 258390f915aSHu Haowen6) 沒有 MIME 編碼,沒有連結,沒有壓縮,沒有附件,只有純文本 259390f915aSHu Haowen----------------------------------------------------------- 260390f915aSHu Haowen 261390f915aSHu HaowenLinus 和其他的內核開發者需要閱讀和評論你提交的改動。對於內核開發者來說 262390f915aSHu Haowen,可以「引用」你的改動很重要,使用一般的 e-mail 工具,他們就可以在你的 263390f915aSHu Haowen代碼的任何位置添加評論。 264390f915aSHu Haowen 265390f915aSHu Haowen因爲這個原因,所有的提交的補丁都是 e-mail 中「內嵌」的。 266390f915aSHu Haowen 267390f915aSHu Haowen.. warning:: 268390f915aSHu Haowen 如果你使用剪切-粘貼你的補丁,小心你的編輯器的自動換行功能破壞你的補丁 269390f915aSHu Haowen 270390f915aSHu Haowen不要將補丁作爲 MIME 編碼的附件,不管是否壓縮。很多流行的 e-mail 軟體不 271390f915aSHu Haowen是任何時候都將 MIME 編碼的附件當作純文本發送的,這會使得別人無法在你的 272390f915aSHu Haowen代碼中加評論。另外,MIME 編碼的附件會讓 Linus 多花一點時間來處理,這就 273390f915aSHu Haowen降低了你的改動被接受的可能性。 274390f915aSHu Haowen 275390f915aSHu Haowen例外:如果你的郵遞員弄壞了補丁,那麼有人可能會要求你使用mime重新發送補丁 276390f915aSHu Haowen 277390f915aSHu Haowen請參閱 :ref:`Documentation/translations/zh_TW/process/email-clients.rst <tw_email_clients>` 278390f915aSHu Haowen以獲取有關配置電子郵件客戶端以使其不受影響地發送修補程序的提示。 279390f915aSHu Haowen 280390f915aSHu Haowen7) e-mail 的大小 281390f915aSHu Haowen---------------- 282390f915aSHu Haowen 283390f915aSHu Haowen大的改動對郵件列表不合適,對某些維護者也不合適。如果你的補丁,在不壓縮 284390f915aSHu Haowen的情況下,超過了300kB,那麼你最好將補丁放在一個能通過 internet 訪問的服 285390f915aSHu Haowen務器上,然後用指向你的補丁的 URL 替代。但是請注意,如果您的補丁超過了 286390f915aSHu Haowen300kb,那麼它幾乎肯定需要被破壞。 287390f915aSHu Haowen 288390f915aSHu Haowen8)回複評審意見 289390f915aSHu Haowen--------------- 290390f915aSHu Haowen 291390f915aSHu Haowen你的補丁幾乎肯定會得到評審者對補丁改進方法的評論。您必須對這些評論作出 292390f915aSHu Haowen回應;讓補丁被忽略的一個好辦法就是忽略審閱者的意見。不會導致代碼更改的 293390f915aSHu Haowen意見或問題幾乎肯定會帶來注釋或變更日誌的改變,以便下一個評審者更好地了解 294390f915aSHu Haowen正在發生的事情。 295390f915aSHu Haowen 296390f915aSHu Haowen一定要告訴審稿人你在做什麼改變,並感謝他們的時間。代碼審查是一個累人且 297390f915aSHu Haowen耗時的過程,審查人員有時會變得暴躁。即使在這種情況下,也要禮貌地回應並 298390f915aSHu Haowen解決他們指出的問題。 299390f915aSHu Haowen 300390f915aSHu Haowen9)不要洩氣或不耐煩 301390f915aSHu Haowen------------------- 302390f915aSHu Haowen 303390f915aSHu Haowen提交更改後,請耐心等待。審閱者是忙碌的人,可能無法立即訪問您的修補程序。 304390f915aSHu Haowen 305390f915aSHu Haowen曾幾何時,補丁曾在沒有評論的情況下消失在空白中,但開發過程比現在更加順利。 306390f915aSHu Haowen您應該在一周左右的時間內收到評論;如果沒有收到評論,請確保您已將補丁發送 307390f915aSHu Haowen到正確的位置。在重新提交或聯繫審閱者之前至少等待一周-在諸如合併窗口之類的 308390f915aSHu Haowen繁忙時間可能更長。 309390f915aSHu Haowen 310390f915aSHu Haowen10)主題中包含 PATCH 311390f915aSHu Haowen-------------------- 312390f915aSHu Haowen 313390f915aSHu Haowen由於到linus和linux內核的電子郵件流量很高,通常會在主題行前面加上[PATCH] 314390f915aSHu Haowen前綴. 這使Linus和其他內核開發人員更容易將補丁與其他電子郵件討論區分開。 315390f915aSHu Haowen 316390f915aSHu Haowen11)簽署你的作品-開發者原始認證 317390f915aSHu Haowen------------------------------- 318390f915aSHu Haowen 319390f915aSHu Haowen爲了加強對誰做了何事的追蹤,尤其是對那些透過好幾層的維護者的補丁,我們 320390f915aSHu Haowen建議在發送出去的補丁上加一個 「sign-off」 的過程。 321390f915aSHu Haowen 322390f915aSHu Haowen"sign-off" 是在補丁的注釋的最後的簡單的一行文字,認證你編寫了它或者其他 323390f915aSHu Haowen人有權力將它作爲開放原始碼的補丁傳遞。規則很簡單:如果你能認證如下信息: 324390f915aSHu Haowen 325390f915aSHu Haowen開發者來源證書 1.1 326390f915aSHu Haowen^^^^^^^^^^^^^^^^^^ 327390f915aSHu Haowen 328390f915aSHu Haowen對於本項目的貢獻,我認證如下信息: 329390f915aSHu Haowen 330390f915aSHu Haowen (a)這些貢獻是完全或者部分的由我創建,我有權利以文件中指出 331390f915aSHu Haowen 的開放原始碼許可證提交它;或者 332390f915aSHu Haowen (b)這些貢獻基於以前的工作,據我所知,這些以前的工作受恰當的開放 333390f915aSHu Haowen 原始碼許可證保護,而且,根據許可證,我有權提交修改後的貢獻, 334390f915aSHu Haowen 無論是完全還是部分由我創造,這些貢獻都使用同一個開放原始碼許可證 335390f915aSHu Haowen (除非我被允許用其它的許可證),正如文件中指出的;或者 336390f915aSHu Haowen (c)這些貢獻由認證(a),(b)或者(c)的人直接提供給我,而 337390f915aSHu Haowen 且我沒有修改它。 338390f915aSHu Haowen (d)我理解並同意這個項目和貢獻是公開的,貢獻的記錄(包括我 339390f915aSHu Haowen 一起提交的個人記錄,包括 sign-off )被永久維護並且可以和這個項目 340390f915aSHu Haowen 或者開放原始碼的許可證同步地再發行。 341390f915aSHu Haowen 342390f915aSHu Haowen那麼加入這樣一行:: 343390f915aSHu Haowen 344390f915aSHu Haowen Signed-off-by: Random J Developer <random@developer.example.org> 345390f915aSHu Haowen 346390f915aSHu Haowen使用你的真名(抱歉,不能使用假名或者匿名。) 347390f915aSHu Haowen 348390f915aSHu Haowen有人在最後加上標籤。現在這些東西會被忽略,但是你可以這樣做,來標記公司 349390f915aSHu Haowen內部的過程,或者只是指出關於 sign-off 的一些特殊細節。 350390f915aSHu Haowen 351390f915aSHu Haowen如果您是子系統或分支維護人員,有時需要稍微修改收到的補丁,以便合併它們, 352390f915aSHu Haowen因爲樹和提交者中的代碼不完全相同。如果你嚴格遵守規則(c),你應該要求提交者 353390f915aSHu Haowen重新發布,但這完全是在浪費時間和精力。規則(b)允許您調整代碼,但是更改一個 354390f915aSHu Haowen提交者的代碼並讓他認可您的錯誤是非常不禮貌的。要解決此問題,建議在最後一個 355390f915aSHu Haowen由簽名行和您的行之間添加一行,指示更改的性質。雖然這並不是強制性的,但似乎 356390f915aSHu Haowen在描述前加上您的郵件和/或姓名(全部用方括號括起來),這足以讓人注意到您對最 357390f915aSHu Haowen後一分鐘的更改負有責任。例如:: 358390f915aSHu Haowen 359390f915aSHu Haowen Signed-off-by: Random J Developer <random@developer.example.org> 360390f915aSHu Haowen [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h] 361390f915aSHu Haowen Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org> 362390f915aSHu Haowen 363390f915aSHu Haowen如果您維護一個穩定的分支機構,同時希望對作者進行致謝、跟蹤更改、合併修復並 364390f915aSHu Haowen保護提交者不受投訴,那麼這種做法尤其有用。請注意,在任何情況下都不能更改作者 365390f915aSHu Haowen的ID(From 頭),因爲它是出現在更改日誌中的標識。 366390f915aSHu Haowen 367390f915aSHu Haowen對回合(back-porters)的特別說明:在提交消息的頂部(主題行之後)插入一個補丁 368390f915aSHu Haowen的起源指示似乎是一種常見且有用的實踐,以便於跟蹤。例如,下面是我們在3.x穩定 369390f915aSHu Haowen版本中看到的內容:: 370390f915aSHu Haowen 371390f915aSHu Haowen Date: Tue Oct 7 07:26:38 2014 -0400 372390f915aSHu Haowen 373390f915aSHu Haowen libata: Un-break ATA blacklist 374390f915aSHu Haowen 375390f915aSHu Haowen commit 1c40279960bcd7d52dbdf1d466b20d24b99176c8 upstream. 376390f915aSHu Haowen 377390f915aSHu Haowen還有, 這裡是一個舊版內核中的一個回合補丁:: 378390f915aSHu Haowen 379390f915aSHu Haowen Date: Tue May 13 22:12:27 2008 +0200 380390f915aSHu Haowen 381390f915aSHu Haowen wireless, airo: waitbusy() won't delay 382390f915aSHu Haowen 383390f915aSHu Haowen [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a] 384390f915aSHu Haowen 385390f915aSHu Haowen12)何時使用Acked-by:,CC:,和Co-Developed by: 386390f915aSHu Haowen---------------------------------------------- 387390f915aSHu Haowen 388390f915aSHu HaowenSinged-off-by: 標記表示簽名者參與了補丁的開發,或者他/她在補丁的傳遞路徑中。 389390f915aSHu Haowen 390390f915aSHu Haowen如果一個人沒有直接參與補丁的準備或處理,但希望表示並記錄他們對補丁的批准, 391390f915aSHu Haowen那麼他們可以要求在補丁的變更日誌中添加一個 Acked-by: 392390f915aSHu Haowen 393390f915aSHu HaowenAcked-by:通常由受影響代碼的維護者使用,當該維護者既沒有貢獻也沒有轉發補丁時。 394390f915aSHu Haowen 395390f915aSHu HaowenAcked-by: 不像簽字人那樣正式。這是一個記錄,確認人至少審查了補丁,並表示接受。 396390f915aSHu Haowen因此,補丁合併有時會手動將Acker的「Yep,looks good to me」轉換爲 Acked-By:(但 397390f915aSHu Haowen請注意,通常最好要求一個明確的Ack)。 398390f915aSHu Haowen 399390f915aSHu HaowenAcked-by:不一定表示對整個補丁的確認。例如,如果一個補丁影響多個子系統,並且 400390f915aSHu Haowen有一個:來自一個子系統維護者,那麼這通常表示只確認影響維護者代碼的部分。這裡 401390f915aSHu Haowen應該仔細判斷。如有疑問,應參考郵件列表檔案中的原始討論。 402390f915aSHu Haowen 403390f915aSHu Haowen如果某人有機會對補丁進行評論,但沒有提供此類評論,您可以選擇在補丁中添加 ``Cc:`` 404390f915aSHu Haowen這是唯一一個標籤,它可以在沒有被它命名的人顯式操作的情況下添加,但它應該表明 405390f915aSHu Haowen這個人是在補丁上抄送的。討論中包含了潛在利益相關方。 406390f915aSHu Haowen 407390f915aSHu HaowenCo-developed-by: 聲明補丁是由多個開發人員共同創建的;當幾個人在一個補丁上工 408390f915aSHu Haowen作時,它用於將屬性賦予共同作者(除了 From: 所賦予的作者之外)。因爲 409390f915aSHu HaowenCo-developed-by: 表示作者身份,所以每個共同開發人:必須緊跟在相關合作作者的 410390f915aSHu Haowen簽名之後。標準的簽核程序要求:標記的簽核順序應儘可能反映補丁的時間歷史,而不 411390f915aSHu Haowen管作者是通過 From :還是由 Co-developed-by: 共同開發的。值得注意的是,最後一 412390f915aSHu Haowen個簽字人:必須始終是提交補丁的開發人員。 413390f915aSHu Haowen 414390f915aSHu Haowen注意,當作者也是電子郵件標題「發件人:」行中列出的人時,「From: 」 標記是可選的。 415390f915aSHu Haowen 416390f915aSHu Haowen作者提交的補丁程序示例:: 417390f915aSHu Haowen 418390f915aSHu Haowen <changelog> 419390f915aSHu Haowen 420390f915aSHu Haowen Co-developed-by: First Co-Author <first@coauthor.example.org> 421390f915aSHu Haowen Signed-off-by: First Co-Author <first@coauthor.example.org> 422390f915aSHu Haowen Co-developed-by: Second Co-Author <second@coauthor.example.org> 423390f915aSHu Haowen Signed-off-by: Second Co-Author <second@coauthor.example.org> 424390f915aSHu Haowen Signed-off-by: From Author <from@author.example.org> 425390f915aSHu Haowen 426390f915aSHu Haowen合作開發者提交的補丁示例:: 427390f915aSHu Haowen 428390f915aSHu Haowen From: From Author <from@author.example.org> 429390f915aSHu Haowen 430390f915aSHu Haowen <changelog> 431390f915aSHu Haowen 432390f915aSHu Haowen Co-developed-by: Random Co-Author <random@coauthor.example.org> 433390f915aSHu Haowen Signed-off-by: Random Co-Author <random@coauthor.example.org> 434390f915aSHu Haowen Signed-off-by: From Author <from@author.example.org> 435390f915aSHu Haowen Co-developed-by: Submitting Co-Author <sub@coauthor.example.org> 436390f915aSHu Haowen Signed-off-by: Submitting Co-Author <sub@coauthor.example.org> 437390f915aSHu Haowen 438390f915aSHu Haowen 439390f915aSHu Haowen13)使用報告人:、測試人:、審核人:、建議人:、修復人: 440390f915aSHu Haowen-------------------------------------------------------- 441390f915aSHu Haowen 442390f915aSHu HaowenReported-by: 給那些發現錯誤並報告錯誤的人致謝,它希望激勵他們在將來再次幫助 443390f915aSHu Haowen我們。請注意,如果bug是以私有方式報告的,那麼在使用Reported-by標記之前,請 444390f915aSHu Haowen先請求權限。 445390f915aSHu Haowen 446390f915aSHu HaowenTested-by: 標記表示補丁已由指定的人(在某些環境中)成功測試。這個標籤通知 447390f915aSHu Haowen維護人員已經執行了一些測試,爲將來的補丁提供了一種定位測試人員的方法,並確 448390f915aSHu Haowen保測試人員的信譽。 449390f915aSHu Haowen 450390f915aSHu HaowenReviewed-by:相反,根據審查人的聲明,表明該補丁已被審查並被認爲是可接受的: 451390f915aSHu Haowen 452390f915aSHu Haowen 453390f915aSHu Haowen審查人的監督聲明 454390f915aSHu Haowen^^^^^^^^^^^^^^^^ 455390f915aSHu Haowen 456390f915aSHu Haowen通過提供我的 Reviewed-by,我聲明: 457390f915aSHu Haowen 458390f915aSHu Haowen (a) 我已經對這個補丁進行了一次技術審查,以評估它是否適合被包含到 459390f915aSHu Haowen 主線內核中。 460390f915aSHu Haowen 461390f915aSHu Haowen (b) 與補丁相關的任何問題、顧慮或問題都已反饋給提交者。我對提交者對 462390f915aSHu Haowen 我的評論的回應感到滿意。 463390f915aSHu Haowen 464390f915aSHu Haowen (c) 雖然這一提交可能會改進一些東西,但我相信,此時,(1)對內核 465390f915aSHu Haowen 進行了有價值的修改,(2)沒有包含爭論中涉及的已知問題。 466390f915aSHu Haowen 467390f915aSHu Haowen (d) 雖然我已經審查了補丁並認爲它是健全的,但我不會(除非另有明確 468390f915aSHu Haowen 說明)作出任何保證或保證它將在任何給定情況下實現其規定的目的 469390f915aSHu Haowen 或正常運行。 470390f915aSHu Haowen 471390f915aSHu HaowenReviewed-by 是一種觀點聲明,即補丁是對內核的適當修改,沒有任何遺留的嚴重技術 472390f915aSHu Haowen問題。任何感興趣的審閱者(完成工作的人)都可以爲一個補丁提供一個 Review-by 473390f915aSHu Haowen標籤。此標籤用於向審閱者提供致謝,並通知維護者已在修補程序上完成的審閱程度。 474390f915aSHu HaowenReviewed-by: 當由已知了解主題區域並執行徹底檢查的審閱者提供時,通常會增加 475390f915aSHu Haowen補丁進入內核的可能性。 476390f915aSHu Haowen 477390f915aSHu HaowenSuggested-by: 表示補丁的想法是由指定的人提出的,並確保將此想法歸功於指定的 478390f915aSHu Haowen人。請注意,未經許可,不得添加此標籤,特別是如果該想法未在公共論壇上發布。 479390f915aSHu Haowen這就是說,如果我們勤快地致謝我們的創意者,他們很有希望在未來得到鼓舞,再次 480390f915aSHu Haowen幫助我們。 481390f915aSHu Haowen 482390f915aSHu HaowenFixes: 指示補丁在以前的提交中修復了一個問題。它可以很容易地確定錯誤的來源, 483390f915aSHu Haowen這有助於檢查錯誤修復。這個標記還幫助穩定內核團隊確定應該接收修復的穩定內核 484390f915aSHu Haowen版本。這是指示補丁修復的錯誤的首選方法。請參閱 :ref:`tw_describe_changes` 485390f915aSHu Haowen描述您的更改以了解更多詳細信息。 486390f915aSHu Haowen 487390f915aSHu Haowen.. _tw_the_canonical_patch_format: 488390f915aSHu Haowen 489390f915aSHu Haowen12)標準補丁格式 490390f915aSHu Haowen---------------- 491390f915aSHu Haowen 492390f915aSHu Haowen本節描述如何格式化補丁本身。請注意,如果您的補丁存儲在 ``Git`` 存儲庫中,則 493390f915aSHu Haowen可以使用 ``git format-patch`` 進行正確的補丁格式設置。但是,這些工具無法創建 494390f915aSHu Haowen必要的文本,因此請務必閱讀下面的說明。 495390f915aSHu Haowen 496390f915aSHu Haowen標準的補丁,標題行是:: 497390f915aSHu Haowen 498390f915aSHu Haowen Subject: [PATCH 001/123] 子系統:一句話概述 499390f915aSHu Haowen 500390f915aSHu Haowen標準補丁的信體存在如下部分: 501390f915aSHu Haowen 502390f915aSHu Haowen - 一個 "from" 行指出補丁作者。後跟空行(僅當發送修補程序的人不是作者時才需要)。 503390f915aSHu Haowen 504390f915aSHu Haowen - 解釋的正文,行以75列包裝,這將被複製到永久變更日誌來描述這個補丁。 505390f915aSHu Haowen 506390f915aSHu Haowen - 一個空行 507390f915aSHu Haowen 508390f915aSHu Haowen - 上面描述的「Signed-off-by」 行,也將出現在更改日誌中。 509390f915aSHu Haowen 510390f915aSHu Haowen - 只包含 ``---`` 的標記線。 511390f915aSHu Haowen 512390f915aSHu Haowen - 任何其他不適合放在變更日誌的注釋。 513390f915aSHu Haowen 514390f915aSHu Haowen - 實際補丁( ``diff`` 輸出)。 515390f915aSHu Haowen 516390f915aSHu Haowen標題行的格式,使得對標題行按字母序排序非常的容易 - 很多 e-mail 客戶端都 517390f915aSHu Haowen可以支持 - 因爲序列號是用零填充的,所以按數字排序和按字母排序是一樣的。 518390f915aSHu Haowen 519390f915aSHu Haowene-mail 標題中的「子系統」標識哪個內核子系統將被打補丁。 520390f915aSHu Haowen 521390f915aSHu Haowene-mail 標題中的「一句話概述」扼要的描述 e-mail 中的補丁。「一句話概述」 522390f915aSHu Haowen不應該是一個文件名。對於一個補丁系列(「補丁系列」指一系列的多個相關補 523390f915aSHu Haowen丁),不要對每個補丁都使用同樣的「一句話概述」。 524390f915aSHu Haowen 525390f915aSHu Haowen記住 e-mail 的「一句話概述」會成爲該補丁的全局唯一標識。它會蔓延到 git 526390f915aSHu Haowen的改動記錄里。然後「一句話概述」會被用在開發者的討論里,用來指代這個補 527390f915aSHu Haowen丁。用戶將希望通過 google 來搜索"一句話概述"來找到那些討論這個補丁的文 528390f915aSHu Haowen章。當人們在兩三個月後使用諸如 ``gitk`` 或 ``git log --oneline`` 之類 529390f915aSHu Haowen的工具查看數千個補丁時,也會很快看到它。 530390f915aSHu Haowen 531390f915aSHu Haowen出於這些原因,概述必須不超過70-75個字符,並且必須描述補丁的更改以及爲 532390f915aSHu Haowen什麼需要補丁。既要簡潔又要描述性很有挑戰性,但寫得好的概述應該這樣做。 533390f915aSHu Haowen 534390f915aSHu Haowen概述的前綴可以用方括號括起來:「Subject: [PATCH <tag>...] <概述>」。標記 535390f915aSHu Haowen不被視爲概述的一部分,而是描述應該如何處理補丁。如果補丁的多個版本已發 536390f915aSHu Haowen送出來以響應評審(即「v1,v2,v3」)或「rfc」,以指示評審請求,那麼通用標記 537390f915aSHu Haowen可能包括版本描述符。如果一個補丁系列中有四個補丁,那麼各個補丁可以這樣 538390f915aSHu Haowen編號:1/4、2/4、3/4、4/4。這可以確保開發人員了解補丁應用的順序,並且他們 539390f915aSHu Haowen已經查看或應用了補丁系列中的所有補丁。 540390f915aSHu Haowen 541390f915aSHu Haowen一些標題的例子:: 542390f915aSHu Haowen 543390f915aSHu Haowen Subject: [patch 2/5] ext2: improve scalability of bitmap searching 544390f915aSHu Haowen Subject: [PATCHv2 001/207] x86: fix eflags tracking 545390f915aSHu Haowen 546390f915aSHu Haowen"From" 行是信體裡的最上面一行,具有如下格式: 547390f915aSHu Haowen From: Patch Author <author@example.com> 548390f915aSHu Haowen 549390f915aSHu Haowen"From" 行指明在永久改動日誌里,誰會被確認爲作者。如果沒有 "From" 行,那 550390f915aSHu Haowen麼郵件頭裡的 "From: " 行會被用來決定改動日誌中的作者。 551390f915aSHu Haowen 552390f915aSHu Haowen說明的主題將會被提交到永久的原始碼改動日誌里,因此對那些早已經不記得和 553390f915aSHu Haowen這個補丁相關的討論細節的有能力的讀者來說,是有意義的。包括補丁程序定位 554390f915aSHu Haowen錯誤的(內核日誌消息、OOPS消息等)症狀,對於搜索提交日誌以尋找適用補丁的人 555390f915aSHu Haowen尤其有用。如果一個補丁修復了一個編譯失敗,那麼可能不需要包含所有編譯失敗; 556390f915aSHu Haowen只要足夠讓搜索補丁的人能夠找到它就行了。與概述一樣,既要簡潔又要描述性。 557390f915aSHu Haowen 558390f915aSHu Haowen"---" 標記行對於補丁處理工具要找到哪裡是改動日誌信息的結束,是不可缺少 559390f915aSHu Haowen的。 560390f915aSHu Haowen 561390f915aSHu Haowen對於 "---" 標記之後的額外註解,一個好的用途就是用來寫 diffstat,用來顯 562390f915aSHu Haowen示修改了什麼文件和每個文件都增加和刪除了多少行。diffstat 對於比較大的補 563390f915aSHu Haowen丁特別有用。其餘那些只是和時刻或者開發者相關的註解,不合適放到永久的改 564390f915aSHu Haowen動日誌里的,也應該放這裡。 565390f915aSHu Haowen使用 diffstat的選項 "-p 1 -w 70" 這樣文件名就會從內核原始碼樹的目錄開始 566390f915aSHu Haowen,不會占用太寬的空間(很容易適合80列的寬度,也許會有一些縮進。) 567390f915aSHu Haowen 568390f915aSHu Haowen在後面的參考資料中能看到適當的補丁格式的更多細節。 569390f915aSHu Haowen 570390f915aSHu Haowen.. _tw_explicit_in_reply_to: 571390f915aSHu Haowen 572390f915aSHu Haowen15) 明確回覆郵件頭(In-Reply-To) 573390f915aSHu Haowen------------------------------- 574390f915aSHu Haowen 575390f915aSHu Haowen手動添加回復補丁的的標題頭(In-Reply_To:) 是有幫助的(例如,使用 ``git send-email`` ) 576390f915aSHu Haowen將補丁與以前的相關討論關聯起來,例如,將bug修復程序連結到電子郵件和bug報告。 577390f915aSHu Haowen但是,對於多補丁系列,最好避免在回復時使用連結到該系列的舊版本。這樣, 578390f915aSHu Haowen補丁的多個版本就不會成爲電子郵件客戶端中無法管理的引用序列。如果連結有用, 579a9d85efbSThorsten Leemhuis可以使用 https://lore.kernel.org/ 重定向器(例如,在封面電子郵件文本中) 580390f915aSHu Haowen連結到補丁系列的早期版本。 581390f915aSHu Haowen 582390f915aSHu Haowen16) 發送git pull請求 583390f915aSHu Haowen-------------------- 584390f915aSHu Haowen 585390f915aSHu Haowen如果您有一系列補丁,那麼讓維護人員通過git pull操作將它們直接拉入子系統存儲 586390f915aSHu Haowen庫可能是最方便的。但是,請注意,從開發人員那裡獲取補丁比從郵件列表中獲取補 587390f915aSHu Haowen丁需要更高的信任度。因此,許多子系統維護人員不願意接受請求,特別是來自新的 588390f915aSHu Haowen未知開發人員的請求。如果有疑問,您可以在封面郵件中使用pull 請求作爲補丁系列 589390f915aSHu Haowen正常發布的一個選項,讓維護人員可以選擇使用其中之一。 590390f915aSHu Haowen 591390f915aSHu Haowenpull 請求的主題行中應該有[Git Pull]。請求本身應該在一行中包含存儲庫名稱和 592390f915aSHu Haowen感興趣的分支;它應該看起來像:: 593390f915aSHu Haowen 594390f915aSHu Haowen Please pull from 595390f915aSHu Haowen 596390f915aSHu Haowen git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus 597390f915aSHu Haowen 598390f915aSHu Haowen to get these changes: 599390f915aSHu Haowen 600390f915aSHu Haowen 601390f915aSHu Haowenpull 請求還應該包含一條整體消息,說明請求中將包含什麼,一個補丁本身的 ``Git shortlog`` 602390f915aSHu Haowen以及一個顯示補丁系列整體效果的 ``diffstat`` 。當然,將所有這些信息收集在一起 603390f915aSHu Haowen的最簡單方法是讓 ``git`` 使用 ``git request-pull`` 命令爲您完成這些工作。 604390f915aSHu Haowen 605390f915aSHu Haowen一些維護人員(包括Linus)希望看到來自已簽名提交的請求;這增加了他們對你的 606390f915aSHu Haowen請求信心。特別是,在沒有簽名標籤的情況下,Linus 不會從像 Github 這樣的公共 607390f915aSHu Haowen託管站點拉請求。 608390f915aSHu Haowen 609390f915aSHu Haowen創建此類簽名的第一步是生成一個 GNRPG 密鑰,並由一個或多個核心內核開發人員對 610390f915aSHu Haowen其進行簽名。這一步對新開發人員來說可能很困難,但沒有辦法繞過它。參加會議是 611390f915aSHu Haowen找到可以簽署您的密鑰的開發人員的好方法。 612390f915aSHu Haowen 613390f915aSHu Haowen一旦您在Git 中準備了一個您希望有人拉的補丁系列,就用 ``git tag -s`` 創建一 614390f915aSHu Haowen個簽名標記。這將創建一個新標記,標識該系列中的最後一次提交,並包含用您的私 615390f915aSHu Haowen鑰創建的簽名。您還可以將changelog樣式的消息添加到標記中;這是一個描述拉請求 616390f915aSHu Haowen整體效果的理想位置。 617390f915aSHu Haowen 618390f915aSHu Haowen如果維護人員將要從中提取的樹不是您正在使用的存儲庫,請不要忘記將已簽名的標記 619390f915aSHu Haowen顯式推送到公共樹。 620390f915aSHu Haowen 621390f915aSHu Haowen生成拉請求時,請使用已簽名的標記作爲目標。這樣的命令可以實現:: 622390f915aSHu Haowen 623390f915aSHu Haowen git request-pull master git://my.public.tree/linux.git my-signed-tag 624390f915aSHu Haowen 625390f915aSHu Haowen參考文獻 626390f915aSHu Haowen-------- 627390f915aSHu Haowen 628390f915aSHu HaowenAndrew Morton, "The perfect patch" (tpp). 629390f915aSHu Haowen <https://www.ozlabs.org/~akpm/stuff/tpp.txt> 630390f915aSHu Haowen 631390f915aSHu HaowenJeff Garzik, "Linux kernel patch submission format". 632390f915aSHu Haowen <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html> 633390f915aSHu Haowen 634390f915aSHu HaowenGreg Kroah-Hartman, "How to piss off a kernel subsystem maintainer". 635390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer.html> 636390f915aSHu Haowen 637390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer-02.html> 638390f915aSHu Haowen 639390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer-03.html> 640390f915aSHu Haowen 641390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer-04.html> 642390f915aSHu Haowen 643390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer-05.html> 644390f915aSHu Haowen 645390f915aSHu Haowen <http://www.kroah.com/log/linux/maintainer-06.html> 646390f915aSHu Haowen 647390f915aSHu HaowenNO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! 648390f915aSHu Haowen <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net> 649390f915aSHu Haowen 650390f915aSHu HaowenKernel Documentation/process/coding-style.rst: 651390f915aSHu Haowen :ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>` 652390f915aSHu Haowen 653390f915aSHu HaowenLinus Torvalds's mail on the canonical patch format: 654390f915aSHu Haowen <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org> 655390f915aSHu Haowen 656390f915aSHu HaowenAndi Kleen, "On submitting kernel patches" 657390f915aSHu Haowen Some strategies to get difficult or controversial changes in. 658390f915aSHu Haowen 659390f915aSHu Haowen http://halobates.de/on-submitting-patches.pdf 660390f915aSHu Haowen 661