接受拉取请求¶
此页面是核心开发者评估、合并和可能回传主存储库上的拉取请求的分步指南。
评估拉取请求¶
在你接受拉取请求之前,你需要确保它已准备好进入公共源代码树。问问自己以下问题
- 问题追踪器上是否有正在进行的讨论?
阅读链接问题。如果正在进行讨论,那么在合并拉取请求之前,我们需要在此处获得解决方案。
- 拉取请求是否首先针对适当的分支进行?
唯一接收新功能的分支是
main
,即正在开发的分支。只有当问题仅出现在该版本和可能更早版本中时,拉取请求才应针对错误修复分支。
- 更改是否可接受?
如果您想在功能或错误修复上分享您的进行中代码,那么您可以打开一个以
WIP
为前缀的拉取请求,在 问题跟踪器 上发布补丁,或创建存储库的公共分支。
- 拉取请求上的检查是否显示测试套件通过?
确保所有状态检查都通过。
- 是否需要更新文档?
如果拉取请求引入了向后不兼容的更改(例如弃用或删除功能),那么在合并拉取请求之前,请确保这些更改反映在文档中。
- 是否添加了适当的标签来表示拉取请求必要的反向移植?
如果确定需要将拉取请求反向移植到一个或多个维护分支,那么核心开发人员可以将标签
needs backport to X.Y
应用到拉取请求。创建反向移植拉取请求后,从原始拉取请求中删除needs backport to X.Y
标签。(只有核心开发人员和 Python 分类团队 的成员可以将标签应用到 GitHub 拉取请求)。
- 拉取请求是否通过了检查,表明提交者已签署 CLA?
确保贡献者已签署 贡献者许可协议 (CLA),除非其更改与之没有任何可能的知识产权关联(例如修复文档中的拼写错误)。CPython CLA 机器人 检查作者是否已签署 CLA,如果他们尚未签署,则在 PR 中回复。有关 CLA 流程的更多问题,请发送邮件至 contributors@python.org。
- 是否
What's New in Python
和Misc/NEWS.d/next
已更新? 如果更改对最终用户特别有趣(例如新功能、重大改进或向后不兼容的更改),那么还应在
What's New in Python
文档(在Doc/whatsnew/
中)中添加一个条目。通常,仅影响文档的更改不需要NEWS
条目。(有关更多信息,请参阅以下部分。)
- 是否
更新 NEWS 和 Python 中的新增内容¶
需要 NEWS 条目的更改¶
对代码库进行的大多数更改都值得在 Misc/NEWS.d
中添加一个条目,以下情况除外
文档更改
测试更改
严格的内部更改,没有用户可见的影响
已经具有
NEWS
条目的更改尚未包含在任何正式版本(包括 alpha 和 beta 版本)中的恢复
对于后两者,请注意以下内容
如果在发布之前恢复了更改,则只需删除相应的条目。否则,必须添加一个新条目,指出该更改已恢复(例如,当某个功能在 alpha 版中发布,然后在第一个 beta 版之前被取消时)。
如果更改是对早期未发布更改的修复(或其他调整),并且原始
NEWS
条目仍然有效,则不需要其他条目。
需要“Python 中的新增功能”条目的更改¶
如果某个更改对最终用户特别有趣(例如,新功能、重大改进或向后不兼容的更改),请在“Python 中的新增功能”文档(在 Doc/whatsnew/
)中添加一个条目,除了 NEWS
条目之外。
在大多数情况下,在“Python 中的新增功能”条目中重复使用 NEWS
条目中的措辞就足够了。
注意
需要在“Python 中的新增功能”中添加条目的更改很可能不适合包含在维护版本中。
如何添加 NEWS 条目¶
NEWS
条目作为单独的文件进入 Misc/NEWS.d
目录。可以使用 blurb-it 或 blurb 工具及其 blurb add
命令来创建 NEWS
条目。
如果您无法使用该工具,则可以手动创建 NEWS
条目文件。Misc/NEWS.d
目录包含一个名为 next
的子目录,其中包含表示受影响内容分类的各种子目录(例如 Misc/NEWS.d/next/Library
用于与标准库相关的更改)。文件名本身应采用 <datetime>.gh-issue-<issue-number>.<nonce>.rst
格式
<datetime>
是今天的日期,用连字符 (-
) 与您当前的本地时间连接,采用YYYY-MM-DD-hh-mm-ss
格式(例如2017-05-27-16-46-23
)。<issue-number>
是更改所属的问题编号(例如12345
表示gh-issue-12345
)。<nonce>
是一个唯一的字符串,用于保证文件名在各个分支中是唯一的(例如Yl4gI2
)。它通常有六个字符长,但可以是任意长度的字母和数字。通过在键盘上键入随机字符可以满足其唯一性。
因此,文件名看起来可能类似于 Misc/NEWS.d/next/Library/2017-05-27-16-46-23.gh-issue-12345.Yl4gI2.rst
。
如何编写 NEWS 条目¶
所有 NEWS
条目最终都会成为变更日志的一部分。变更日志包含大量条目,其目标受众主要是用户,而不是核心开发人员和贡献者。在措辞 NEWS
条目时,请考虑这一点。简洁准确地描述更改对用户可见的影响;避免冗长的技术阐述、离题,并且不要期望或要求读者阅读更改的实际差异。
NEWS
文件的内容应为有效的 reStructuredText。应使用 80 个字符的列宽。文件中没有缩进或前导标记(例如 -
)。也没有必要以问题编号开头条目,因为它已经是文件名的一部分。您也可以使用 内联标记。以下是 NEWS
条目的示例
Fix warning message when :func:`os.chdir` fails inside
:func:`test.support.temp_cwd`. Patch by Chris Jerdonek.
可以将内联 Sphinx 角色(如 :func:
)用于帮助读者查找更多信息。您可以使用 make html 构建 HTML 并验证链接目标是否合适。
使用 Git¶
另请参阅
作为核心开发人员,您可以将更改推送到官方 Python 存储库,因此您需要谨慎处理您的工作流
您不应将新分支推送到主存储库。您仍可以在用于开发补丁的分支中使用它们。您还可以在集成到主存储库之前将这些分支推送到单独的公共存储库以进行维护工作。
您不应直接提交到
main
分支或任何维护分支。您应针对您自己的功能分支进行提交,然后创建一个拉取请求。对于较小的更改,您可以通过 GitHub Web UI 快速进行编辑。如果您选择使用 Web UI,请注意 GitHub 将在主 CPython 存储库中创建一个新分支,而不是在您的分支中。在将新创建的分支合并到
main
分支或任何维护分支后,请删除此分支。为了保持 CPython 存储库的整洁,请在几天内删除新分支。
保留主存储库的一个分支,因为它允许您还原所有本地更改(甚至是已提交的更改),如果您对本地克隆不满意。
查看活动分支¶
如果您使用 git branch
,那么您将看到 分支列表。唯一接收新功能的分支是 main
,即正在开发的分支。其他分支仅接收错误修复或安全修复。在几乎所有情况下,修复应首先在 main
中进行,然后移植回较旧的分支。
将更改反向移植到较旧版本¶
如果确定需要将拉取请求反向移植到一个或多个维护分支,那么核心开发人员可以将标签 needs backport to X.Y
应用于拉取请求。
在合并拉取请求后,miss-islington(机器人)将首先尝试自动执行反向移植。如果 miss-islington 无法执行,则拉取请求作者或合并它的核心开发人员应使用 cherry_picker.py 生成的反向移植作为起点,自行查看反向移植。
您可以从原始拉取请求中获取提交哈希,也可以在 main
分支上使用 git log
。要显示 10 个最近的提交哈希及其提交的第一行,请使用以下命令
git log -10 --oneline
您可以使用分支为反向移植拉取请求添加前缀,并引用 main
中的拉取请求编号。以下是一个示例
[3.9] gh-12345: Fix the Spam Module (GH-NNNN)
此处“gh-12345”是 GitHub 问题编号,“GH-NNNN”是原始拉取请求的编号。请注意,cherry_picker.py 会自动添加分支前缀。
创建反向移植拉取请求后,请从原始拉取请求中删除 needs backport to X.Y
标签。(只有核心开发人员和 Python 分类团队 的成员才能将标签应用于 GitHub 拉取请求)。
还原已合并的拉取请求¶
要还原已合并的拉取请求,请按拉取请求底部的 Revert
按钮。这将打开一个页面,用于创建新的拉取请求,其中可以还原提交。它还将在主 CPython 存储库中创建一个新分支。在合并拉取请求后,请删除该分支。
始终包含还原提交的原因,以帮助其他人理解还原的原因。原因应作为提交消息的一部分包含在内。以下是一个示例
Revert gh-NNNN: Fix Spam Module (GH-111)
Reverts python/cpython#111.
Reason: This commit broke the buildbot.