[您也可以檢視此文件的 單頁版本。]
Subversion 不是完美的軟體。它包含錯誤、缺乏功能,而且像其他任何軟體一樣有進步的空間。與大多數軟體專案一樣,Subversion 專案使用問題追蹤工具來管理已知的軟體未解決問題。但與大多數軟體專案不同的是,我們試著讓我們的問題追蹤器相對沒有垃圾。這並不是說我們不想聽聞 Subversion 的問題,畢竟,我們無法修復我們不知道已損壞的問題。只是我們發現管理不善的問題追蹤器比幫助更多的是阻礙。
這封郵件幾乎說明了一切(除了現在您應該在發佈到 dev@ 列表之前發佈到 users@ 列表)
From: Karl Fogel <kfogel@collab.net> Subject: Please ask on the list before filing a new issue. To: dev@subversion.tigris.org Date: Tue, 30 Jul 2002 10:51:24 (CDT) Folks, we're getting tons of new issues, which is a Good Thing in general, but some of them don't really belong in the issue tracker. They're things that would be better solved by a quick conversation here on the dev list. Compilation problems, behavior questions, feature ideas that have been discussed before, that sort of thing. *Please* be more conservative about filing issues. The issues database is physically much more cumbersome than email. It wastes people's time to have conversations in the issues database that should be had in email. (This is not a libel against the issue tracker, it's just a result of the fact that the issues database is for permanent storage and flow annotation, not for real-time conversation.) If you encounter a situation where Subversion is clearly behaving wrongly, or behaving opposite to what the documentation says, then it's okay to file the issue right away (after searching to make sure it isn't already filed, of course!). But if you're a) Requesting a new feature, or b) Having build problems, or c) Not sure what the behavior should be, or d) Disagreeing with current intended behavior, or e) Not TOTALLY sure that others would agree this is a bug, or f) For any reason at all not sure this should be filed, ...then please post to the dev list first. You'll get a faster response, and others won't be forced to use the issues database to have the initial real-time conversations. Nothing is lost this way. If we eventually conclude that it should be in the issue tracker, then we can still file it later, after the description and reproduction recipe have been honed on the dev list. Thank you, -Karl
以下是我們要求大家在回報問題或請求增強 Subversion 時遵守的政策。
首先,請確定這是一個錯誤。如果 Subversion 沒有按照您的預期運作,請在文件和郵件清單檔案中尋找證據,證明它應該按照您的預期運作。當然,如果這是一個常識性的問題,例如 Subversion 剛剛毀損了您的資料並導致您的顯示器冒煙,那麼您可以相信自己的判斷。但是如果您不確定,請先在使用者郵件清單 users@subversion.apache.org 上詢問,或在 IRC 上詢問,irc.libera.chat,頻道 #svn(網頁介面 或 Matrix)。
您還應該 在錯誤追蹤器中搜尋,看看是否有人已經回報過這個錯誤。
一旦您確定這是一個錯誤,而且我們還不知道,您能做的最重要的事情就是提出一個簡單的描述和重現步驟。例如,如果您最初發現的錯誤涉及十次提交的五個檔案,請嘗試只用一個檔案和一次提交來重現它。重現步驟越簡單,開發人員成功重現錯誤並修復它的可能性就越大。
當您撰寫重現食譜時,不要僅撰寫您執行以產生錯誤的動作的散文描述。相反地,提供您執行的一系列精確命令的文字轉錄,以及其輸出。使用剪下和貼上來執行此動作。如果涉及檔案,請務必包含檔案名稱,甚至在您認為可能相關時包含其內容。最好的方法是將您的重現食譜打包成腳本;這對我們很有幫助。以下是此類腳本的範例:repro-template.sh 適用於類 Unix 系統和 Bourne shell,或repro-template.bat適用於 Windows shell(由 Paolo Compieta 提供);我們歡迎為其他系統提供類似的範本腳本。
快速健全性檢查:您*正在*執行 Subversion 的最新版本,對吧? :-) 錯誤可能已經修正;您應該針對最新的 Subversion 開發樹測試您的重現食譜。
除了重現食譜之外,我們還需要您重現錯誤的環境的完整描述。這表示
完成上述步驟後,即可開始撰寫報告。首先清楚描述錯誤內容。也就是說,說明您預期 Subversion 的運作方式,並與實際運作方式做對比。雖然對您來說錯誤可能很明顯,但對其他人來說可能並非如此,因此最好避免猜謎遊戲。接著說明環境描述和重現步驟。如果您還想加入對原因的推測,甚至提供修正錯誤的修補程式,那就太好了 — 請參閱修補程式提交指南。
將所有這些資訊發佈到 dev@subversion.apache.org,或者如果您已經在那裡並被要求提交問題,請前往問題追蹤器並按照那裡的說明進行操作。
謝謝。我們知道提交有效的錯誤報告需要花費大量時間,但一份好的報告可以節省開發人員數小時的時間,並讓錯誤更有可能獲得修正。
如果錯誤出在 Subversion 本身,請將郵件寄送至 users@subversion.apache.org。一旦確認為錯誤,某人(可能是您)可以將其輸入問題追蹤器。(或者如果您對錯誤相當確定,請繼續直接發佈到我們的開發人員清單 dev@subversion.apache.org。但如果您不確定,最好先發佈到 users@;那裡有人可以告訴您遇到的行為是否預期。)
如果錯誤出在 APR 函式庫中,請將錯誤回報給以下兩個郵件清單:dev@apr.apache.org、dev@subversion.apache.org。
如果錯誤出在 Neon HTTP 函式庫中,請將錯誤回報給:neon@webdav.org、dev@subversion.apache.org。
如果錯誤出在 Apache Serf HTTP 函式庫中,請將錯誤回報給:dev@serf.apache.org、dev@subversion.apache.org。
如果錯誤出在 Apache HTTPD 2.x 中,請將錯誤回報給以下兩個郵件清單:dev@httpd.apache.org、dev@subversion.apache.org。Apache httpd 開發人員郵件清單流量很大,因此您的錯誤回報貼文可能會被忽略。您也可以在 https://apache-httpd.dev.org.tw/bug_report.html 提交錯誤回報。
如果錯誤出在地毯上,請給它一個擁抱,並讓它保持舒適。
問題追蹤器里程碑是 Subversion 開發人員如何組織其工作並與彼此和 Subversion 使用者基礎進行溝通的重要面向。除了在執行高階 問題分類 時主要使用的一些里程碑之外,專案的問題追蹤器里程碑通常會命名為反映版本號碼及其變體。里程碑會根據問題的狀態用於略有不同的目的,因此了解這些區別非常重要。
對於開放中的問題(狀態為 OPEN、IN PROGRESS 或 REOPENED 的問題),里程碑表示開發人員針對該問題解決方案所設定的 Subversion 版本。一般來說,我們使用 次要版本-consider 格式的里程碑,表示正在考慮將問題的解決方案發佈在 次要版本.0 中。例如,我們認為可以且應該新增到 Subversion 1.9.0 的功能,將會獲得 1.9-consider 里程碑。基於顯而易見的原因,這些發佈目標的準確性會隨著時間推移而越來越差,因此建議使用者不要將它們視為開發人員社群的約束性承諾。
在任何時間點,社群中都會進行「下一個重大版本」的開發工作。隨著該版本開始成形,開發人員將更清楚哪些問題是該版本的「必備事項」(也稱為「版本阻礙因素」),哪些是「可有可無」,以及哪些應該完全延後到未來的版本。問題里程碑是傳達這些決策結果的機制。被視為版本阻礙因素的問題將從 次要版本-consider 里程碑移至 次要版本.0 里程碑;「可有可無」的問題將保留 次要版本-consider 里程碑;而延後到該版本的發佈問題將重新設定里程碑為 另一個次要版本-consider 或 未排程,具體取決於我們是否明確預測何時會處理該問題。
延續先前的範例,隨著 Subversion 1.9.0-to-be 的開發進度,開發人員會評估我們計畫在該版本中發布的功能。如果我們認為 Subversion 1.9 不應在沒有該功能的情況下發布,我們會將其里程碑從 1.9-consider 變更為 1.9.0;如果我們希望在有該功能的情況下發布,但不想承諾,我們會將里程碑保留為 1.9-consider;如果我們很清楚我們不會在 1.9.x 發行系列中實作該功能,我們會將問題重新設定里程碑為其他項目(例如 1.10-consider)。
次要版本.0 里程碑的準確性非常重要,因為開發人員傾向於使用這些問題在主要發行週期的最後幾天集中精力。
對於已修正的問題(狀態為 已解決,且解決方案為 已修正),問題里程碑會採用新的公用程式:追蹤首先包含該問題解決方案的 Subversion 發行版本。不論特定問題的目標發行版本為何,一旦問題已解決,其里程碑應反映首先包含該解決方案的發布版本的確切版本號碼。
對於其他已關閉問題(不是「開放」且並未真正「修正」),問題里程碑通常幾乎沒有意義。當問題本身因為是重複的,或是無效或不正確的報告而被有效忽略時,嘗試維護該追蹤器欄位幾乎沒有意義。
在這些狀態之間轉換問題時,必須小心。已解決的開放問題需要調整其里程碑,以反映將首先反映該變更的 Subversion 版本。已解決的問題回溯到先前版本串流時,需要調整其里程碑,以指向該先前版本的版本號碼。最後,已解決的問題會 重新開啟,需要重新評估其里程碑,以確定問題是否為版本阻擋 (次要版本.0) 或不是 (次要版本-考慮)。在這種情況下,檢視問題的變更歷程記錄,以查看在問題已解決並修復之前使用了哪個里程碑,可能會有所幫助。
當問題提交時,它會進入特殊里程碑「---」,表示未設定里程碑。這是一個暫存區,問題會保留在其中,直到有人有機會檢視它們並決定如何處理。
當您按里程碑排序時,未設定里程碑的問題會首先列出,而問題分類是瀏覽所有 開放問題(從未設定里程碑的問題開始)的程序,確定哪些問題重要到現在必須修復,哪些可以等到另一個版本,哪些是現有問題的重複,哪些已經解決,等等。對於每個仍保持開放的議題,這也表示必須確保適當地設定各種欄位:類型、子元件、平台、作業系統、版本、關鍵字(如果有)等等。
以下是程序的概觀(在此範例中,1.5 是下一個版本,因此緊急問題將會轉移到那裡)
for i in issues_marked_as("---"): if issue_is_a_dup_of_some_other_issue(i): close_as_dup(i) elif issue_is_invalid(i): # A frequent reason for invalidity is that the reporter # did not follow the "buddy system" for filing. close_as_invalid(i) elif issue_already_fixed(i): version = fixed_in_release(i) move_to_milestone(i, version) close_as_fixed(i) elif issue_unreproducible(i): close_as_worksforme(i) elif issue_is_real_but_we_won't_fix_it(i): close_as_wontfix(i) elif issue_is_closeable_for_some_other_reason(i): close_it_for_that_reason(i) # Else issue should remain open, so DTRT with it... # Set priority, environment, component, etc, as needed. adjust_all_fields_that_need_adjustment(i) # Figure out where to put it. if issue_is_a_lovely_fantasy(i): move_to_milestone(i, "blue-sky") if issue_is_not_important_enough_to_block_any_particular_release(i): move_to_milestone(i, "nonblocking") elif issue_resolution_would_require_incompatible_changes(i): move_to_milestone(i, "2.0-consider") elif issue_hurts_people_somewhat(i): move_to_milestone(i, "1.6-consider") # or whatever elif issue_hurts_people_a_lot(i): move_to_milestone(i, "1.5-consider") elif issue_hurts_and_hurts_and_should_block_the_release(i): move_to_milestone(i, "1.5")
此文件提供有關 Subversion 開發人員如何回應安全性問題的資訊。如要回報問題,請參閱 安全性回報說明。
Subversion 的首要任務是確保您的資料安全。為此,Subversion 開發社群非常重視安全性。我們展現這種重視的一種方式,就是不假裝自己是密碼學或安全性專家。我們不為 Subversion 編寫一堆專有安全性機制,而是寧願教導 Subversion 與由了解該領域的人員提供的安全性函式庫和通訊協定互通。例如,Subversion 將線路加密委託給 OpenSSL 等工具。它將驗證和基本授權委託給 Cyrus SASL 或 Apache HTTP Server 及其豐富的模組所提供的機制。只要我們能透過使用第三方提供的函式庫和 API 來利用安全性專家的知識,我們就會持續這麼做。
此文件說明我們在收到或發現可能被歸類為具有安全性影響的問題時採取的步驟,並旨在補充 Apache 指南,提供給承諾者採取相同的步驟。
安全性問題應在 private@subversion.apache.org + security@apache.org 上討論。security@subversion.apache.org 是針對這兩個清單的方便別名。(請注意,與 security@httpd.a.o 不同,它不是郵件清單,因此您無法單獨訂閱/取消訂閱它。)
我們在以下網址公布先前安全性建議清單:https://subversion.dev.org.tw/security/
我們在 PMC 的私人儲存庫中追蹤進行中的問題:https://svn.apache.org/repos/private/pmc/subversion/security