介绍GitHub问题集成

2020年5月6日,作者Alex Ross,@alexr00

在Visual Studio Code团队中,我们使用GitHub issues 来跟踪我们所有的工作。从我们详细的迭代计划到个别错误,我们将所有内容都作为GitHub issues进行跟踪。鉴于issues对我们的团队和其他GitHub项目的重要性,我们希望将GitHub issues集成到VS Code中。这一新增功能补充了我们一年多前宣布的GitHub Pull Request工作。从VS Code 1.45版本开始,这种将issues和源代码更紧密结合的新支持将在GitHub Pull Requests and Issues扩展(以前称为GitHub Pull Requests)中提供。

我们的集成方法

问题和拉取请求通常密切相关,因此将它们包含在同一个GitHub Pull Requests and Issues扩展中是一个合乎逻辑的步骤,因为问题和拉取请求都需要使用相同的GitHub API。我们不希望直接将GitHub功能添加到核心VS Code编辑器中,因为有许多源代码控制选项。相反,当我们检测到用户打开的存储库使用GitHub时,我们会推荐该扩展。通过与我们自己的扩展API合作,我们确保API具有扩展作者所需的功能,其他存储库提供商可以实现类似的集成。

重要的是我们不应该规定过于具体的工作流程。相反,我们的目标是以一种灵活的方式将问题引入内部开发循环。例如,在代码注释中为问题提供更多上下文是该目标的一部分,但在VS Code中添加完整的问题管理并不合适。我们不想重新发明GitHub已经做得很好的UI。我们确实希望建立那些尚未存在的连接。

代码上下文中的问题

在源代码中链接到问题是我们工作流程中的正常部分,特别是当有一些难以理解的逻辑或需要采取行动的//TODO注释时。如果你在VS Code仓库中搜索问题引用,你会看到很多提到的问题。虽然链接提供了更多信息的指针,但要真正了解更多信息,你需要离开编辑器。现在,通过悬停获取这个问题上下文,你不需要打断你的流程来了解更多。

问题悬停

问题悬停功能适用于完整的问题URL、问题评论URL、通过编号引用的问题(#1234),以及通过owner/repository#1234引用的问题(例如Microsoft/vscode#1234)。我们也经常在代码库中引用用户。VS Code的提议API中有许多开发者引用,以明确谁负责这些提议。

用户悬停

在提交信息中通常需要问题上下文来引用提交解决的问题,在源代码文件中,以及在Markdown(如变更日志)中也是如此。为了轻松添加上下文,我们为问题和用户添加了完成建议。在Git提交文本框中,您可以使用githubIssues.issueCompletionFormatScm设置来格式化您的问题完成。在Markdown文件中,问题完成时显示为Markdown链接,而在其他文件中,问题完成时显示为简单的问题编号(#1234)。

完成建议

可能的问题列表可以通过设置githubIssues.queries进行配置,因此如果您在多个仓库中工作,您可以包含这些问题的查询。查询使用GitHub搜索语法。用户列表包括当前打开的仓库中的协作者。

问题查询

从任何地方创建问题

当我们在处理一些源代码时在VS Code中发现一个bug,我们会创建一个问题并将其分配给负责该区域的人。或者,如果发现bug的人也是负责人,我们通常会留下一个//TODO注释作为提醒,以便稍后处理。当你有许多贡献者时,代码库中散落的//TODO很难跟踪(尽管可以说我们都这样做过),但创建一个问题并在//TODO中引用它是可跟踪的。为了减少在深入源代码时创建问题的障碍和上下文丢失,有几种新的创建问题的方式:

从 //TODO 注释(可通过 githubIssues.createIssueTriggers 配置),您可以在不离开 VS Code 的情况下创建并分配问题。

从TODO创建问题

从选择中,您可以使用GitHub Issues: Create Issue from Selection命令快速创建一个问题,并附带一个指向源代码的永久链接。如果您只需要指向某些代码的指针,您也可以使用GitHub Issues: Copy GitHub Permalink命令。最后,如果终端中有失败信息,您只需将输出复制到剪贴板,并使用GitHub Issues: Create Issue from Clipboard创建问题。

处理问题

一个常见的工作流程是查看你的问题,选择一个来处理,创建一个分支进行工作,进行一些提交,然后通过拉取请求将你的更改合并回主分支。从新的问题视图中,你可以完全做到这一点。

处理问题

为了适应更多的工作流程,您可以配置几个选项。如果您的流程不涉及创建主题分支,您可以使用githubIssues.useBranchForIssues禁用分支创建。如果您对分支有不同的命名方案,您可以使用githubIssues.issueBranchTitle设置。Issues视图中列出的问题可以配置为使用githubIssues.queries自定义查询。

想了解更多吗?

你可以观看这个来自GitHub Satellite每个GitHub用户都应该了解的VS Code演讲,由Sana Ajani, @sana_ajani, 和Burke Holland, @burkeholland主讲。


你也可以阅读使用GitHub主题,它更详细地描述了VS Code的GitHub集成。

前进

目前,这些功能大多仅在仓库克隆中支持(不包括分叉),因此还需要做更多工作来支持这些及其他用例。我们非常期待您对这个扩展的反馈,所以请随时在扩展的仓库问题中给我们留下建议!

编程快乐!

Alex Ross, VS Code 开发者 @alexr00