ssphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/process/7.AdvancedTopicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Simplified)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_CN/process/7.AdvancedTopicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/process/7.AdvancedTopicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/process/7.AdvancedTopicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/process/7.AdvancedTopicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/process/7.AdvancedTopicsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Traditional)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhY/var/lib/git/docbuild/linux/Documentation/translations/zh_TW/process/7.AdvancedTopics.rsthKubhwarning)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]h paragraph)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_TW/disclaimer-zh_TW.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubhnote)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h]h)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h](h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<}(hhhhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhhubh>。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhhhKubh field_body)}(hO:ref:`Documentation/process/7.AdvancedTopics.rst ` h]h)}(hN:ref:`Documentation/process/7.AdvancedTopics.rst `h]h)}(hj#h]hinline)}(hj#h]h*Documentation/process/7.AdvancedTopics.rst}(hj*hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j(hj%ubah}(h]h ]h"]h$]h&]refdoc+translations/zh_TW/process/7.AdvancedTopics refdomainj5reftyperef refexplicitrefwarn reftargetdevelopment_advancedtopicsuh1hhhhKhj!ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h Translatorh]h Translator}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj[hhhKubj)}(h0時奎亮 Alex Shi h]h)}(h/時奎亮 Alex Shi h](h時奎亮 Alex Shi <}(hjphhhNhNubh)}(halex.shi@linux.alibaba.comh]halex.shi@linux.alibaba.com}(hjxhhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:alex.shi@linux.alibaba.comuh1hhjpubh>}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjlubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h校譯h]h校譯}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhhhKubj)}(h\吳想成 Wu XiangCheng 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> h]h)}(h[吳想成 Wu XiangCheng 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>h](h吳想成 Wu XiangCheng <}(hjhhhNhNubh)}(hbobwxc@email.cnh]hbobwxc@email.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1hhjubh> 胡皓文 Hu Haowen <}(hjhhhNhNubh)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK hjhhubeh}(h]h ]h"]h$]h&]uh1jhhhhhhhKubhtarget)}(h".. _tw_development_advancedtopics:h]h}(h]h ]h"]h$]h&]refidtw-development-advancedtopicsuh1jhKhhhhhhubhsection)}(hhh](htitle)}(h 高級主題h]h 高級主題}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h現在,希望您能夠掌握開發流程的工作方式。然而,還有更多的東西要學!本節將介紹 一些主題,這些主題對希望成爲Linux內核開發過程常規部分的開發人員有幫助。h]h現在,希望您能夠掌握開發流程的工作方式。然而,還有更多的東西要學!本節將介紹 一些主題,這些主題對希望成爲Linux內核開發過程常規部分的開發人員有幫助。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj )}(hhh](j)}(h使用Git管理補丁h]h使用Git管理補丁}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,hhhhhKubh)}(hX內核使用分佈式版本控制始於2002年初,當時Linus首次開始使用專有的Bitkeeper應用 程序。雖然BitKeeper存在爭議,但它所體現的軟件版本管理方法卻肯定不是。分佈式 版本控制可以立即加速內核開發項目。現在有好幾種免費的BitKeeper替代品。 但無論好壞,內核項目都已經選擇了Git作爲其工具。h]hX內核使用分佈式版本控制始於2002年初,當時Linus首次開始使用專有的Bitkeeper應用 程序。雖然BitKeeper存在爭議,但它所體現的軟件版本管理方法卻肯定不是。分佈式 版本控制可以立即加速內核開發項目。現在有好幾種免費的BitKeeper替代品。 但無論好壞,內核項目都已經選擇了Git作爲其工具。}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubh)}(hX使用Git管理補丁可以使開發人員的生活更加輕鬆,尤其是隨着補丁數量的增長。Git也 有其粗糙的邊角和一定的危險性,它是一個年輕和強大的工具,仍然在其開發人員完善 中。本文檔不會試圖教會讀者如何使用git;這會是個巨長的文檔。相反,這裏的重點 將是Git如何特別適合內核開發過程。想要加快用Git速度的開發人員可以在以下網站上 找到更多信息:h]hX使用Git管理補丁可以使開發人員的生活更加輕鬆,尤其是隨着補丁數量的增長。Git也 有其粗糙的邊角和一定的危險性,它是一個年輕和強大的工具,仍然在其開發人員完善 中。本文檔不會試圖教會讀者如何使用git;這會是個巨長的文檔。相反,這裏的重點 將是Git如何特別適合內核開發過程。想要加快用Git速度的開發人員可以在以下網站上 找到更多信息:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj,hhubh block_quote)}(hXhttps://git-scm.com/ https://www.kernel.org/pub/software/scm/git/docs/user-manual.html h](h)}(hhttps://git-scm.com/h]h)}(hjah]hhttps://git-scm.com/}(hjchhhNhNubah}(h]h ]h"]h$]h&]refurijauh1hhj_ubah}(h]h ]h"]h$]h&]uh1hhhhK&hj[ubh)}(hAhttps://www.kernel.org/pub/software/scm/git/docs/user-manual.htmlh]h)}(hjyh]hAhttps://www.kernel.org/pub/software/scm/git/docs/user-manual.html}(hj{hhhNhNubah}(h]h ]h"]h$]h&]refurijyuh1hhjwubah}(h]h ]h"]h$]h&]uh1hhhhK(hj[ubeh}(h]h ]h"]h$]h&]uh1jYhhhK&hj,hhubh)}(h0同時網上也能找到各種各樣的教程。h]h0同時網上也能找到各種各樣的教程。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj,hhubh)}(hX0在嘗試使用它生成補丁供他人使用之前,第一要務是閱讀上述網頁,對Git的工作方式 有一個紮實的瞭解。使用Git的開發人員應能進行拉取主線存儲庫的副本,查詢修訂 歷史,提交對樹的更改,使用分支等操作。瞭解Git用於重寫歷史的工具(如rebase) 也很有用。Git有自己的術語和概念;Git的新用戶應該瞭解引用、遠程分支、索引、 快進合併、推拉、遊離頭等。一開始可能有點嚇人,但這些概念不難通過一點學習來 理解。h]hX0在嘗試使用它生成補丁供他人使用之前,第一要務是閱讀上述網頁,對Git的工作方式 有一個紮實的瞭解。使用Git的開發人員應能進行拉取主線存儲庫的副本,查詢修訂 歷史,提交對樹的更改,使用分支等操作。瞭解Git用於重寫歷史的工具(如rebase) 也很有用。Git有自己的術語和概念;Git的新用戶應該瞭解引用、遠程分支、索引、 快進合併、推拉、遊離頭等。一開始可能有點嚇人,但這些概念不難通過一點學習來 理解。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hj,hhubh)}(hZ使用git生成通過電子郵件提交的補丁是提高速度的一個很好的練習。h]hZ使用git生成通過電子郵件提交的補丁是提高速度的一個很好的練習。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj,hhubh)}(hX當您準備好開始建立Git樹供其他人查看時,無疑需要一個可以從中拉取的服務器。 如果您有一個可以訪問因特網的系統,那麼使用git-daemon設置這樣的服務器相對 簡單。同時,免費的公共託管網站(例如github)也開始出現在網絡上。成熟的開發 人員可以在kernel.org上獲得一個帳戶,但這些帳戶並不容易得到;更多有關信息, 請參閱 https://kernel.org/faq/ 。h](hX當您準備好開始建立Git樹供其他人查看時,無疑需要一個可以從中拉取的服務器。 如果您有一個可以訪問因特網的系統,那麼使用git-daemon設置這樣的服務器相對 簡單。同時,免費的公共託管網站(例如github)也開始出現在網絡上。成熟的開發 人員可以在kernel.org上獲得一個帳戶,但這些帳戶並不容易得到;更多有關信息, 請參閱 }(hjhhhNhNubh)}(hhttps://kernel.org/faq/h]hhttps://kernel.org/faq/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hj,hhubh)}(hX正常的Git工作流程涉及到許多分支的使用。每一條開發線都可以分爲單獨的“主題 分支”,並獨立維護。Git的分支很容易使用,沒有理由不使用它們。而且,在任何 情況下,您都不應該在任何您打算讓其他人從中拉取的分支中進行開發。應該小心地 創建公開可用的分支;當開發分支處於完整狀態並已準備好時(而不是之前)才合併 開發分支的補丁。h]hX正常的Git工作流程涉及到許多分支的使用。每一條開發線都可以分爲單獨的“主題 分支”,並獨立維護。Git的分支很容易使用,沒有理由不使用它們。而且,在任何 情況下,您都不應該在任何您打算讓其他人從中拉取的分支中進行開發。應該小心地 創建公開可用的分支;當開發分支處於完整狀態並已準備好時(而不是之前)才合併 開發分支的補丁。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hj,hhubh)}(hX)Git提供了一些強大的工具,可以讓您重寫開發歷史。一個不方便的補丁(比如說, 一個打破二分法的補丁,或者有其他一些明顯的缺陷)可以在適當的位置修復,或者 完全從歷史中消失。一個補丁系列可以被重寫,就好像它是在今天的主線上寫的一樣, 即使你已經花了幾個月的時間在寫它。可以透明地將更改從一個分支轉移到另一個 分支。等等。明智地使用git修改歷史的能力可以幫助創建問題更少的乾淨補丁集。h]hX)Git提供了一些強大的工具,可以讓您重寫開發歷史。一個不方便的補丁(比如說, 一個打破二分法的補丁,或者有其他一些明顯的缺陷)可以在適當的位置修復,或者 完全從歷史中消失。一個補丁系列可以被重寫,就好像它是在今天的主線上寫的一樣, 即使你已經花了幾個月的時間在寫它。可以透明地將更改從一個分支轉移到另一個 分支。等等。明智地使用git修改歷史的能力可以幫助創建問題更少的乾淨補丁集。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhj,hhubh)}(hXQ然而,過度使用這種功能可能會導致其他問題,而不僅僅是對創建完美項目歷史的 簡單癡迷。重寫歷史將重寫該歷史中包含的更改,將經過測試(希望如此)的內核樹 變爲未經測試的內核樹。除此之外,如果開發人員沒有共享項目歷史,他們就無法 輕鬆地協作;如果您重寫了其他開發人員拉入他們存儲庫的歷史,您將使這些開發 人員的生活更加困難。因此,這裏有一個簡單的經驗法則:被導出到其他地方的歷史 在此後通常被認爲是不可變的。h]hXQ然而,過度使用這種功能可能會導致其他問題,而不僅僅是對創建完美項目歷史的 簡單癡迷。重寫歷史將重寫該歷史中包含的更改,將經過測試(希望如此)的內核樹 變爲未經測試的內核樹。除此之外,如果開發人員沒有共享項目歷史,他們就無法 輕鬆地協作;如果您重寫了其他開發人員拉入他們存儲庫的歷史,您將使這些開發 人員的生活更加困難。因此,這裏有一個簡單的經驗法則:被導出到其他地方的歷史 在此後通常被認爲是不可變的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj,hhubh)}(hX^因此,一旦將一組更改推送到公開可用的服務器上,就不應該重寫這些更改。如果您 嘗試強制進行無法快進合併的更改(即不共享同一歷史記錄的更改),Git將嘗試強制 執行此規則。這可能覆蓋檢查,有時甚至需要重寫導出的樹。在樹之間移動變更集以 避免linux-next中的衝突就是一個例子。但這種行爲應該是罕見的。這就是爲什麼 開發應該在私有分支中進行(必要時可以重寫)並且只有在公共分支處於合理的較新 狀態時才轉移到公共分支中的原因之一。h]hX^因此,一旦將一組更改推送到公開可用的服務器上,就不應該重寫這些更改。如果您 嘗試強制進行無法快進合併的更改(即不共享同一歷史記錄的更改),Git將嘗試強制 執行此規則。這可能覆蓋檢查,有時甚至需要重寫導出的樹。在樹之間移動變更集以 避免linux-next中的衝突就是一個例子。但這種行爲應該是罕見的。這就是爲什麼 開發應該在私有分支中進行(必要時可以重寫)並且只有在公共分支處於合理的較新 狀態時才轉移到公共分支中的原因之一。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj,hhubh)}(hX當主線(或其他一組變更所基於的樹)前進時,很容易與該樹合併以保持領先地位。 對於一個私有的分支,rebasing 可能是一個很容易跟上另一棵樹的方法,但是一旦 一棵樹被導出到外界,rebasing就不可取了。一旦發生這種情況,就必須進行完全 合併(merge)。合併有時是很有意義的,但是過於頻繁的合併會不必要地擾亂歷史。 在這種情況下建議的做法是不要頻繁合併,通常只在特定的發佈點(如主線-rc發佈) 合併。如果您對特定的更改感到緊張,則可以始終在私有分支中執行測試合併。在 這種情況下,git“rerere”工具很有用;它能記住合併衝突是如何解決的,這樣您 就不必重複相同的工作。h]hX當主線(或其他一組變更所基於的樹)前進時,很容易與該樹合併以保持領先地位。 對於一個私有的分支,rebasing 可能是一個很容易跟上另一棵樹的方法,但是一旦 一棵樹被導出到外界,rebasing就不可取了。一旦發生這種情況,就必須進行完全 合併(merge)。合併有時是很有意義的,但是過於頻繁的合併會不必要地擾亂歷史。 在這種情況下建議的做法是不要頻繁合併,通常只在特定的發佈點(如主線-rc發佈) 合併。如果您對特定的更改感到緊張,則可以始終在私有分支中執行測試合併。在 這種情況下,git“rerere”工具很有用;它能記住合併衝突是如何解決的,這樣您 就不必重複相同的工作。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhj,hhubh)}(hX關於Git這樣的工具的一個最大的反覆抱怨是:補丁從一個存儲庫到另一個存儲庫的 大量移動使得很容易陷入錯誤建議的變更中,這些變更避開審查雷達進入主線。當內 核開發人員看到這種情況發生時,他們往往會感到不高興;在Git樹上放置未審閱或 主題外的補丁可能會影響您將來讓樹被拉取的能力。引用Linus的話:h]hX關於Git這樣的工具的一個最大的反覆抱怨是:補丁從一個存儲庫到另一個存儲庫的 大量移動使得很容易陷入錯誤建議的變更中,這些變更避開審查雷達進入主線。當內 核開發人員看到這種情況發生時,他們往往會感到不高興;在Git樹上放置未審閱或 主題外的補丁可能會影響您將來讓樹被拉取的能力。引用Linus的話:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj,hhubh literal_block)}(h你可以給我發補丁,但當我從你那裏拉取一個Git補丁時,我需要知道你清楚 自己在做什麼,我需要能夠相信事情而 *無需* 手動檢查每個單獨的更改。h]h你可以給我發補丁,但當我從你那裏拉取一個Git補丁時,我需要知道你清楚 自己在做什麼,我需要能夠相信事情而 *無需* 手動檢查每個單獨的更改。}hj6sbah}(h]h ]h"]h$]h&]hhuh1j4hhhKehj,hhubh)}(h((http://lwn.net/Articles/224135/)。h](h(}(hjDhhhNhNubh)}(hhttp://lwn.net/Articles/224135/h]hhttp://lwn.net/Articles/224135/}(hjLhhhNhNubah}(h]h ]h"]h$]h&]refurijNuh1hhjDubh)。}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhj,hhubh)}(hXW爲了避免這種情況,請確保給定分支中的所有補丁都與相關主題緊密相關;“驅動程序 修復”分支不應更改核心內存管理代碼。而且,最重要的是,不要使用Git樹來繞過 審查過程。不時的將樹的摘要發佈到相關的列表中,在合適時候請求linux-next中 包含該樹。h]hXW爲了避免這種情況,請確保給定分支中的所有補丁都與相關主題緊密相關;“驅動程序 修復”分支不應更改核心內存管理代碼。而且,最重要的是,不要使用Git樹來繞過 審查過程。不時的將樹的摘要發佈到相關的列表中,在合適時候請求linux-next中 包含該樹。}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhj,hhubh)}(hX如果其他人開始發送補丁以包含到您的樹中,不要忘記審閱它們。還要確保您維護正確 的作者信息; git “am”工具在這方面做得最好,但是如果補丁通過第三方轉發給您, 您可能需要在補丁中添加“From:”行。h]hX如果其他人開始發送補丁以包含到您的樹中,不要忘記審閱它們。還要確保您維護正確 的作者信息; git “am”工具在這方面做得最好,但是如果補丁通過第三方轉發給您, 您可能需要在補丁中添加“From:”行。}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohj,hhubh)}(hX1請求拉取時,請務必提供所有相關信息:樹的位置、要拉取的分支以及拉取將導致的 更改。在這方面 git request-pull 命令非常有用;它將按照其他開發人員所期望的 格式化請求,並檢查以確保您已記得將這些更改推送到公共服務器。h]hX1請求拉取時,請務必提供所有相關信息:樹的位置、要拉取的分支以及拉取將導致的 更改。在這方面 git request-pull 命令非常有用;它將按照其他開發人員所期望的 格式化請求,並檢查以確保您已記得將這些更改推送到公共服務器。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshj,hhubeh}(h]gitah ]h"]使用git管理補丁ah$]h&]uh1j hj hhhhhKubj )}(hhh](j)}(h 審閱補丁h]h 審閱補丁}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKxubh)}(hXd一些讀者顯然會反對將本節與“高級主題”放在一起,因爲即使是剛開始的內核開發人員 也應該審閱補丁。當然,沒有比查看其他人發佈的代碼更好的方法來學習如何在內核環境 中編程了。此外,審閱者永遠供不應求;通過審閱代碼,您可以對整個流程做出重大貢獻。h]hXd一些讀者顯然會反對將本節與“高級主題”放在一起,因爲即使是剛開始的內核開發人員 也應該審閱補丁。當然,沒有比查看其他人發佈的代碼更好的方法來學習如何在內核環境 中編程了。此外,審閱者永遠供不應求;通過審閱代碼,您可以對整個流程做出重大貢獻。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjhhubh)}(hX審查代碼可能是一副令人生畏的圖景,特別是對一個新的內核開發人員來說,他們 可能會對公開詢問代碼感到緊張,而這些代碼是由那些有更多經驗的人發佈的。不過, 即使是最有經驗的開發人員編寫的代碼也可以得到改進。也許對(所有)審閱者最好 的建議是:把審閱評論當成問題而不是批評。詢問“在這條路徑中如何釋放鎖?” 總是比說“這裏的鎖是錯誤的”更好。h]hX審查代碼可能是一副令人生畏的圖景,特別是對一個新的內核開發人員來說,他們 可能會對公開詢問代碼感到緊張,而這些代碼是由那些有更多經驗的人發佈的。不過, 即使是最有經驗的開發人員編寫的代碼也可以得到改進。也許對(所有)審閱者最好 的建議是:把審閱評論當成問題而不是批評。詢問“在這條路徑中如何釋放鎖?” 總是比說“這裏的鎖是錯誤的”更好。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjhhubh)}(hX不同的開發人員將從不同的角度審查代碼。部分人會主要關注代碼風格以及代碼行是 否有尾隨空格。其他人會主要關注補丁作爲一個整體實現的變更是否對內核有好處。 同時也有人會檢查是否存在鎖問題、堆棧使用過度、可能的安全問題、在其他地方 發現的代碼重複、足夠的文檔、對性能的不利影響、用戶空間ABI更改等。所有類型 的檢查,只要它們能引導更好的代碼進入內核,都是受歡迎和值得的。h]hX不同的開發人員將從不同的角度審查代碼。部分人會主要關注代碼風格以及代碼行是 否有尾隨空格。其他人會主要關注補丁作爲一個整體實現的變更是否對內核有好處。 同時也有人會檢查是否存在鎖問題、堆棧使用過度、可能的安全問題、在其他地方 發現的代碼重複、足夠的文檔、對性能的不利影響、用戶空間ABI更改等。所有類型 的檢查,只要它們能引導更好的代碼進入內核,都是受歡迎和值得的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id2ah ]h"] 審閱補丁ah$]h&]uh1j hj hhhhhKxubeh}(h](jid1eh ]h"]( 高級主題tw_development_advancedtopicseh$]h&]uh1j hhhhhhhKexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(jjjjjjjju nametypes}(jjjjuh}(jj jj jj,jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]hCHyperlink target "tw-development-advancedtopics" is not referenced.}hjtsbah}(h]h ]h"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jouba transformerN include_log]=Documentation/translations/zh_TW/process/7.AdvancedTopics.rst(NNNNta decorationNhhub.