Go Wiki:次要版本
我们的默认决定始终是不进行回退移植,但针对安全问题、没有解决方法的严重问题和文档修复的修复程序将回退移植到最近的两个发行分支(如果适用于该分支)。(例如,最近的两个发行分支是release-branch.go1.16
和release-branch.go1.17
,从中会发布新的Go 1.16.x
和Go 1.17.x
版本)实验性端口的修复程序通常不会回退移植。
“严重”问题是指完全阻止程序运行的问题。
一旦相关方认为应考虑将某个问题回退移植,他们就会打开一到两个标题类似于package: title [1.17 backport]
的“子”问题。该问题应包含指向原始问题的链接以及关于可能需要回退移植的简要理由。
GopherBot 能够自动响应以下评论在主问题中打开回退移植问题。(关键字是@gopherbot
、backport
、please
以及可选的发行版。整个消息会引用到新问题中。)
@gopherbot 请考虑将其回退移植到 1.17,这是一个回归。
@gopherbot 请打开回退移植跟踪问题。这是一个严重的编译器错误。
修复程序是为主要问题开发的,当修复程序合并到主分支时,该问题会被关闭。
子问题被分配到次要版本里程碑并标记为CherryPickCandidate,并在那里讨论其候选资格。一旦获得批准,它就会过渡到CherryPickApproved。发布经理(Go 团队中处理发布流程的一个子集)和/或代码所有者通过非正式流程批准 cherry-pick。
当子问题标记为CherryPickApproved时,修复该问题的更改的原始作者应立即创建并发送针对发行分支的 cherry-pick 更改,该更改可以在准备好后立即合并,从而关闭子问题。
在发布时,任何不是发布阻塞程序的打开的回退移植问题都会被推送到下一个次要版本里程碑,并且会使用已合并的更改生成次要版本。
创建 cherry-pick CL
请注意,只有原始 CL 的作者和批准者才能创建 cherry-pick。
将主要修复程序提交到 master 后,请对适用的发行分支进行 cherry-pick CL。
如果没有任何合并冲突,您可以使用 Gerrit UI 进行 cherry-pick
在弹出窗口中输入分支名称(例如release-branch.go1.10
),添加提交消息前缀(例如[release-branch.go1.10]
),更新“Fixes”行,并且不要更改任何其他自动行。
要从命令行进行 cherry-pick 或解决合并冲突,请记下最终提交哈希值,然后使用git codereview
和git 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]
的消息前缀,并更新“Fixes”行到子问题。不要更改或删除“Change-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
-
在 golang.org/x 存储库中,将修复程序从
master
分支 cherry-pick 到internal-branch.go1.x-vendor
分支。提交消息应包含“Updates golang/go#nnn”以提及回退移植问题。
-
在
release-branch.go1.x
分支上的主存储库中,创建一个从 golang.org/x 内部分支提取修复程序的 CLgo get golang.org/x/[email protected] 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.x
或特殊情况下的release-branch.go1.x-bundle
。)
此内容是Go Wiki的一部分。