提交拉取请求¶
现在您已经提交了所有更改,可以提交拉取请求了。为确保审核过程顺利,您需要采取一些步骤。
使用预提交¶
提交任何更改时,预提交会自动运行。如果在提交过程中发现任何问题,都会导致提交失败。在可能的情况下,pre-commit 会对发现的问题进行必要的修改。在下面的示例中,"ruff "检查发现了一个代码格式问题:
(.venv) $ git add some/interesting_file.py
(.venv) $ git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Failed
- hook id: ruff-format
- files were modified by this hook
1 file reformatted, 488 files left unchanged
ruff check...............................................................Passed
codespell................................................................Passed
(.venv) $ git add some/interesting_file.py
(.venv) $ git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Failed
- hook id: ruff-format
- files were modified by this hook
1 file reformatted, 488 files left unchanged
ruff check...............................................................Passed
codespell................................................................Passed
(.venv) C:\...>git add some/interesting_file.py
(.venv) C:\...>git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Failed
- hook id: ruff-format
- files were modified by this hook
1 file reformatted, 488 files left unchanged
ruff check...............................................................Passed
codespell................................................................Passed
在这种情况下,"ruff "会自动修复问题;因此你可以重新添加任何因提交前检查而被修改的文件,并重新提交更改。不过,有些检查需要你手动修改。完成这些修改后,重新添加任何修改过的文件,并重新提交。
(.venv) $ git add some/interesting_file.py
(.venv) $ git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Passed
ruff check...............................................................Passed
codespell................................................................Passed
[bugfix e3e0f73] Minor change
1 file changed, 4 insertions(+), 2 deletions(-)
(.venv) $ git add some/interesting_file.py
(.venv) $ git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Passed
ruff check...............................................................Passed
codespell................................................................Passed
[bugfix e3e0f73] Minor change
1 file changed, 4 insertions(+), 2 deletions(-)
(.venv) C:\...>git add some\interesting_file.py
(.venv) C:\...>git commit -m "Minor change"
check toml...............................................................Passed
check yaml...............................................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
ruff format..............................................................Passed
ruff check...............................................................Passed
codespell................................................................Passed
[bugfix e3e0f73] Minor change
1 file changed, 4 insertions(+), 2 deletions(-)
一切通过后,您会看到一条提交已最终完成的消息,而您的 git 日志也会显示您的提交是最新的。现在就可以推送到 GitHub 了。
将更改推送到 GitHub 并创建拉取请求¶
第一次向 GitHub 推送时,系统会提供一个 URL,让你直接进入 GitHub 页面创建新的拉取请求。按照 URL 创建您的拉取请求。
下面的示例显示了push时的预期结果,并突出显示了 URL。
(.venv) $ git push
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 24 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 689 bytes | 689.00 KiB/s, done.
Total 8 (delta 4), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
remote:
remote: Create a pull request for 'fix-win11-build' on GitHub by visiting:
remote: https://github.com/<your GitHub username>/BeeWare/pull/new/fix-win11-build
remote:
To https://github.com/<your GitHub username>/BeeWare.git
* [new branch] fix-win11-build -> fix-win11-build
(.venv) $ git push
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 24 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 689 bytes | 689.00 KiB/s, done.
Total 8 (delta 4), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
remote:
remote: Create a pull request for 'fix-win11-build' on GitHub by visiting:
remote: https://github.com/<your GitHub username>/BeeWare/pull/new/fix-win11-build
remote:
To https://github.com/<your GitHub username>/BeeWare.git
* [new branch] fix-win11-build -> fix-win11-build
(.venv) C:\...>git push
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 24 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 689 bytes | 689.00 KiB/s, done.
Total 8 (delta 4), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
remote:
remote: Create a pull request for 'fix-win11-build' on GitHub by visiting:
remote: https://github.com/<your GitHub username>/BeeWare/pull/new/fix-win11-build
remote:
To https://github.com/<your GitHub username>/BeeWare.git
* [new branch] fix-win11-build -> fix-win11-build
如果您已将当前分支推送到 GitHub,就不会再收到该 URL。不过,还有其他方法可以获取 PR 创建 URL:
- 导航至上游版本库,点击 "拉取请求",然后点击 "新建拉取请求",选择要提交拉取请求的版本。
- 如果您最近推送过,请导航到上游版本库,找到文件列表上方显示该版本库 "最近推送过 "的横幅,然后点击 "比较和拉取请求 "按钮。
- 使用 GitHub CLI
gh pr create命令,并填写提示。 - 使用 GitHub CLI
gh pr create --web命令打开网页浏览器,进入 PR 创建页面。
这些选项中的任何一个都能让您创建新的拉取请求。
GitHub 命令行界面:gh
GitHub 提供GitHub CLI,让你可以在终端通过 gh 命令访问 GitHub
的许多功能。GitHub CLI 文档](https://cli.github.com/manual/)涵盖了所有功能。
拉取请求内容¶
拉取请求的标题必须翔实、清晰、简洁。尽可能保持简短,但如果需要,也可以使用较长的标题。一个好的拉取请求标题应该能让人在没有任何上下文的情况下,对您的拉取请求所实现的错误或功能有一个合理的概念。
PR 说明必须清楚地反映 PR 中的变更。一个没有任何背景的人应该能够读懂你的描述,并相对完整地理解为什么要进行修改。避免使用笑话、成语、口语和不必要的格式,如使用大写字母或过多的标点符号;这样做的目的是直截了当地解释您的公关中发生了什么,避免使用这些内容会使他人更容易理解您的描述。
如果有任何重现案例或您使用的任何测试方案尚未成为 PR 中更改的一部分,则应在 PR 中加以解释和包含。解释应包括如何运行它们,以及如何才能重现所需的结果。
如果您的拉取请求将解决 #1234 问题,则应在拉取请求描述中包含文本 Fixes #1234。这将导致该问题在拉取请求合并时自动关闭。你可以使用相同的
#1234 语法引用其他讨论、问题或拉动请求。你也可以通过在编号前加上前缀来引用不同版本库中的问题,例如 python/cpython#1234
就引用了 CPython 版本库中的问题 1234。
持续集成¶
持续集成,或CI,是对您的拉取请求进行自动检查的过程。这可能包括简单的检查,如确保代码格式正确;但也包括运行测试套件和构建文档。
有很多变更都可能导致 CI 失败。一般来说,我们不会审核未通过 CI 的 PR。如果您创建了一个拉取请求,但 CI 失败了,我们也不会开始审核,直到它通过为止。如果您的更改导致失败,您有责任查明原因并解决问题。
当 CI 失败时,失败链接将显示在 PR 页面底部的 "某些检查不成功 "标题下。您会看到一个失败检查列表,如果还有通过的检查,该列表会显示在所有检查列表的顶部。如果点击失败链接,就会跳转到日志。日志通常会提供您所需的所有信息,帮助您找出故障原因。阅读日志并尝试找出故障发生的原因,然后采取必要的措施加以解决。
有时,CI 检查会因为与您的更改无关的原因而失败。这可能是由于运行 CI 检查的机器出现了问题,也可能是因为 CI 检查不稳定。如果您看到了失败,而且非常确定与您的更改无关,请在您的 PR 中添加相关注释,我们会进行调查。
要触发新的 CI 运行,需要向分支推送新的变更。
如果您遇到需要帮助才能通过 CI 的情况,请在 PR 上留言告诉我们,我们会尽力提供帮助。
提交前 "和 "提交者 "检查
如果 "pre-commit "或 "towncrier "检查失败,将阻止大部分其他 CI 检查的运行。您需要先解决相关问题,然后才能运行全套检查。
我们的 CI 资源有限。要知道,每次向分支推送时,CI 都会启动。如果要进行大量修改,最好在本地进行修改,然后一次性推送。CI 只会批量运行最新的提交,从而将 CI 系统的负载降至最低。
只有在通过 CI 审查,或者您能解释为何未通过 CI 审查时,才算完成了提交 PR 的流程。
您的拉取请求可能需要补充内容(例如[变更说明]),才能进入[审核]阶段。