使用 Copilot 修复告警
注意
此功能目前处于公开预览,可能会发生更改。 Copilot云代理 并且 Copilot自动修复 必须在存储库中可用。
您可以将 code scanning 警报分配给 Copilot,让其为您修复该警报。 分配警报会启动代理会话: Copilot云代理 浏览代码库、生成修补程序、验证它并打开拉取请求。
每个代理式自动修复会话均按 Copilot云代理 会话计费,并消耗 AI credits。 请参阅“关于 GitHub Copilot 云代理”。
若要将单个警报分配给 Copilot:
- 在 GitHub 上,导航到存储库的主页面。
- 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality。
- 在左边栏中,单击“ Code scanning”****。
- 单击警报的名称。
- 在页面顶部,单击 分配给 Copilot。
你也可以将警报批量分配给 Copilot:
- 从 code scanning 警报积压列表或安全活动中,选择 1 到 25 个警报,并将其分配给 Copilot,后者会在单个拉取请求中解决所选警报。 请参阅“修复安全活动中的警报”。
- 通过使用 REST API,将警报的被分配者设置为
copilot-swe-agent[bot]。 请参阅“适用于代码扫描的 REST API 终结点”。
通常在几分钟内,Copilot 会创建一个由 Copilot 提交的拉取请求草稿,其中包含修复摘要和已执行的验证步骤。 查看代理会话日志以了解详细信息,并评论拉取请求(提及 Copilot)以请求它进行迭代。
Copilot云代理 会尽最大努力验证修复结果。 如果无法验证修复,或者认为该告警可能是误报,就会在拉取请求中说明。
正在生成建议的修复方案
如果你的存储库中没有 Copilot云代理,你仍然可以使用 GitHub Copilot自动修复 为该警报生成一步式建议修复。
注意
无需订阅 GitHub Copilot 即可使用 GitHub Copilot自动修复。 Copilot自动修复 可供 GitHub.com 上的所有公共存储库使用,也可供具备 GitHub Code Security 许可证的组织和企业拥有的内部或私有存储库使用。
- 在 GitHub 上,导航到存储库的主页面。
- 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality。
- 在左边栏中,单击“ Code scanning”****。
- 单击警报的名称。
- 如果 Copilot自动修复 可以建议修复,请在页面顶部单击“ 生成修补程序”。
- 在页面底部生成建议的修复后,即可单击“使用修复创建 PR”,自动生成应用建议修复的拉取请求。 会从默认分支创建一个新分支,提交生成的修复方案并创建草稿拉取请求。 你可以像测试和编辑其他任何修复方案一样测试和编辑该建议的修复方案。
你还可以使用历史警报终结点的自动修复 API 来生成、获取和提交建议的修复方案。
Copilot自动修复 针对 code scanning 警报,无法为所有情况下的每个警报生成修复方案。 该功能会尽力运行,无法保证每次都能 100% 成功。 有关自动生成的修复的限制信息,请参阅“建议的限制”。
手动修复警报
任何对仓库具有写入权限的人都可以通过提交对代码的更正来修复警报。 如果存储库已安排在拉取请求上运行 code scanning,最好提交包含更正内容的拉取请求。 这将触发 code scanning 对更改的分析,并测试你的修补程序不会引入任何新问题。 请参阅“鉴定拉取请求中的代码扫描警报”。
若要在没有离开 GitHub 的情况下跟踪团队工作流中的修正工作,可以将警报链接到问题。 请参阅“将代码扫描警报链接到 GitHub 议题”。
可使用自由文本搜索或筛选器显示警报子集,然后依次将所有匹配的警报标记为已关闭。
警报只能在一个分支中修复。 你可在警报摘要中使用“分支”筛选器,以检查某个警报是否已在特定分支中修复。

请注意,如果你已筛选掉非默认分支上的警报,但默认分支上存在相同的警报,则任何给定警报的警报页仍将仅反映默认分支上的警报状态,即使该状态与非默认分支的状态冲突也是如此。 例如,如果 branch-x 的警报摘要中的“未解决”列表中显示的警报已在默认分支上修复,该警报可能会在警报页上显示“已修复”状态。 可在警报页右侧的“受影响的分支”部分查看筛选的分支的警报状态。
注意
如果使用多个配置运行 code scanning ,则有时会由多个配置生成相同的警报。 除非定期运行所有配置,否则可能会看到在一个配置中已修复但在另一个配置中未修复的警报。 可以从分支中删除这些过时的配置和警报。 请参阅 从分支中删除过时的配置和警报。
忽略警报
有两种方法可以关闭警报。 你可以修复代码中的问题,也可以忽略警报。
取消显示警报是关闭你认为不需要修复的警报的一种方法。 例如,仅用于测试的代码中有错误,或者修复错误的工作超过改进代码的潜在益处。 你可消除代码中的 code scanning 注释或 Security and quality 选项卡摘要列表中的警报。
当你忽略警报时:
- 该警报在所有分支中取消显示。
- 该警报已从项目的当前警报数量中移除。
- 警报被移动到警报摘要中的“Closed(已关闭)”列表,需要时你可以在其中重新打开它。
- 已记录关闭警报的原因。
- (可选)你可以对忽略操作添加评论,以记录忽略警报的背景信息。
- 下次 code scanning 运行时,相同的代码不会生成警报。
要忽略警报:
- 在 GitHub 上,导航到存储库的主页面。
- 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality。
- 在左边栏中,单击“ Code scanning”****。
- 如果要忽略警报,请务必先了解警报,以便选择正确的忽略原因。 单击要了解的警报。
- 查看警报,然后单击“忽略警报”**** 并选择或输入关闭警报的原因。

dismissed_comment 终结点的 alerts/{alert_number} 中。 有关详细信息,请参阅“适用于代码扫描的 REST API 终结点”。
如果将 CodeQL 警报作为误报予以忽略,例如因为代码使用了不受支持的清理库,请考虑参与 CodeQL 存储库并改进分析。 有关 CodeQL 的详细信息,请参阅“参与 CodeQL”。
一次忽略多个警报
如果项目有多个由于相同原因要忽略的警报,你可以从警报摘要中批量忽略它们。 通常,你需要筛选列表,然后忽略所有匹配的警报。 例如,你可能想要忽略项目中所有已标记为特定通用缺陷枚举 (CWE) 漏洞的当前警报。
重新打开已消除的警报
如果已消除警报,但后来意识到需要修复警报,可以重新打开警报,并使用代码修复问题。 显示关闭的警报列表,找到警报进行显示,然后重新打开。 然后,可以像修复其他警报一样修复该警报。
从分支中删除过时的配置和警报
单个存储库上可能有多个 code scanning 配置。 运行时,多个配置可以生成相同的警报。 此外,如果配置按不同的计划运行,警报状态可能会因配置少见或过时而过时。 有关多个配置产生的警报的更多信息,请参阅 代码扫描警报。
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality。
-
在左边栏中,单击“ Code scanning”****。
-
在“”Code scanning下,单击警报 code scanning 。
-
在边栏的“受影响的分支”部分,单击所需的分支。
-
在“配置分析”对话框中,查看在所选分支上报告了此警报的配置的详细信息。 若要删除所需分支的不需要的配置,请单击 。
如果误删了某个配置,单击“取消”**** 以避免应用更改。

-
删除所有不需要的配置并确认显示了预期的配置后,单击“保存更改”****。
如果在意外删除配置后保存更改,请重新运行配置以更新警报。 有关重新运行使用 GitHub Actions的配置的详细信息,请参阅 重新运行工作流程和作业。
注意
- 如果删除存储库的默认分支的所有 code scanning 配置,则默认分支将保留在“受影响的分支”边栏中,但不会由任何配置分析。
- 如果删除存储库的默认分支以外的任何分支的所有 code scanning 配置,该分支将从“受影响的分支”边栏中删除。