Go Wiki:次要版本

我們的預設決定應該永遠是不回溯,但是對於安全問題沒有解決方法的嚴重問題文件修正的修正會回溯到最近的兩個版本分支,如果適用於該分支。(例如,目前最新的兩個版本分支是release-branch.go1.16release-branch.go1.17,從其中提出新的Go 1.16.xGo 1.17.x版本)實驗性載入項的修正通常不會回溯。

「嚴重」的問題是一個會阻止程式運作的問題。

一旦有興趣的人員認為問題應該考量回溯,他們就會開立一或兩個標題為類似package:標題 [1.17 回溯]的「子項目」問題。問題應該包含原始問題的連結,以及關於為何需要回溯的簡短理由。

GopherBot 能夠自動開啟回溯問題,以回應主問題中的類似以下的留言。(關鍵字是@gopherbotbackportplease和選擇性的版本。新問題中會引用整則訊息。)

@gopherbot 請考慮將此回溯到 1.17,這是回歸。

@gopherbot 請開啟回溯追蹤問題。這個是嚴重的編譯器錯誤。

此修正開發用於解決主要問題,當修正與主分支合併後,即會將其關閉。

次要問題會指派給次要版本里程碑並標記為 CherryPickCandidate,其候選資格會在其中討論。這候選資格經核准後會轉移至 CherryPickApproved。版本管理員(負責版本流程的 Go 團隊子集)和/或程式碼所有者經由非正式流程核准 Cherry-pick。

當次要問題標記為 CherryPickApproved 時,修正此問題變更的原始作者就應立即 建立並寄送 Cherry-pick 變更 至版本分支,此變更可在準備妥當後立即合併,並關閉次要問題。

在版本發布時,任何未解決的回溯問題(若非版本阻礙因素)都會推遲至下一個次要版本里程碑,且會使用已合併的變更建立次要版本。

建立 Cherry-pick CL

請注意,只有原始 CL 作者和核准者才有能力建立 Cherry-pick。

在主要修正提交至主控代碼庫後,請製作 Cherry-pick CL 至適用的版本分支。

若沒有合併衝突,您可以使用 Gerrit UI 來建立 Cherry-pick。

Top right corner > More > Cherry-pick

在快顯視窗中,輸入分支名稱(如 release-branch.go1.10),加入提交訊息前綴(如 [release-branch.go1.10]),更新「修正」行,且不要變更任何其他的自動化行。

若要從命令列進行 Cherry-pick 或解決合併衝突,請記下最後的提交雜湊,接著使用 git codereviewgit cherry-pick 來準備 Cherry-pick CL

git checkout release-branch.go1.17
git codereview change cherry-pick-NNNN
git cherry-pick $COMMIT_HASH
git commit --amend # add message prefix and change Fixes line
git codereview mail

Cherry-pick CL 必須包含訊息前綴,如 [release-branch.go1.10],並將「修正」行更新為次要問題。請勿變更或移除「變更 ID」行或其他 Gerrit 行。

程式碼檢閱流程其他部分與一般 CL 相同。提交至版本分支的權限有更多限制。如果您沒有提交權限,則當您的 CL 就緒時,版本管理員將會為您提交。如果您有權限,請確定要在對應問題標示為 CherryPickApproved 之前不要提交 CL。

此時,無法透過傳送 拉取請求 建立 Cherry-pick CL。僅支援 Gerrit。請參閱 golang.org/issue/30037

供應的 golang.org/x 套件中 Cherry-pick CL

Go標準函式庫包含一些產生檔案,其真實來源並非主儲存庫,而是在golang.org/x儲存庫中。舉例來說,golang.org/x/sys/unix套件的複本已提供給Go樹狀結構,且golang.org/x/net/http2套件的複本已綑綁。這表示需要傳回某個Go發行版本的golang.org/x套件修正程式將需要兩個對應的CL

  1. 在golang.org/x儲存庫中,從master分支挑選並修正到internal-branch.go1.x-vendor分支。

    提交訊息應納入「Updates golang/go#nnn」以提及傳回議題。

  2. release-branch.go1.x分支的主儲存庫中,建立一個CL,從golang.org/x內部分支汲取修正程式

    go get golang.org/x/repo@internal-branch.go1.x-vendor
    go mod tidy
    go mod vendor
    go generate -run=bundle std  # If a bundled package needs regeneration.
    

    提交訊息應納入「Fixes #nnn」以關閉傳回議題。

(在Go 1.16時,golang.org/x分支名稱永遠是internal-branch.go1.x-vendor。在Go 1.15時,golang.org/x分支名稱為release-branch.go1.xrelease-branch.go1.x-bundle,見特殊範例。)


此內容為Go Wiki的一部分。