跳到主要内容

在临时私有分支中协作以解决存储库安全漏洞

您可以创建一个临时私有分支,以私下协作修复公共存储库中的安全漏洞。

注意

本文适用于作为公共存储库所有者编辑存储库级公告。

非存储库所有者用户可以参与 GitHub 安全公告数据库中的全局安全公告,网址为 github.com/advisories。对全局公告的编辑不会更改或影响公告在存储库中的显示方式。更多信息,请参阅“编辑 GitHub 安全公告数据库中的安全公告”。

先决条件

在您可以参与临时私有分支的协作之前,您必须创建一个安全公告草稿。更多信息,请参阅“创建存储库安全公告”。

创建临时私有分支

任何拥有安全公告管理权限的用户都可以创建临时私有分支。

为确保漏洞信息的安全,包括 CI 在内的集成无法访问临时私有分支。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在存储库名称下,单击 ** 安全**。如果您看不到“安全”选项卡,请选择 ** **下拉菜单,然后单击 **安全**。

    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.

  3. 在左侧边栏的“报告”下,单击 ** 公告**。

  4. 在“安全公告”列表中,单击您要创建临时私有分支的安全公告的名称。

  5. 滚动到公告表单的底部,然后单击 **启动临时私有分支**。

    Screenshot of the "Collaborate on a patch in private" area of the form. A button, labeled "Start a temporary private fork", is outlined in dark orange.

    存储库的私有分支已创建,并显示在公告页面上。

    私有分支的命名约定与 GitHub 安全公告数据库中使用的公告约定非常相似,并遵循以下格式:repo-ghsa-xxxx-xxxx-xxxx,其中

    • repo 是存储库的名称。为保持在存储库名称的 100 个字符限制以内,我们将原始存储库的名称截断为 80 个字符。
    • xxxx-xxxx-xxxx 是安全公告草稿的唯一标识符
      • x 是以下集合中的字母或数字:23456789cfghjmpqrvwx
      • 数字和字母是随机分配的。
      • 所有字母和数字都小写。

例如,如果您在名为 octocat-repo 的存储库中创建临时私有分支,并且安全公告草稿的自动生成的 ID 为 GHSA-x854-cvjg-vx26,则临时分支将被称为 octocat-repo-ghsa-x854-cvjg-vx26

您还可以使用 REST API 创建临时私有分支。更多信息,请参阅 REST API 文档中的“创建临时私有分支”。

向临时私有分支添加协作者

任何拥有安全公告管理权限的用户都可以向安全公告添加其他协作者,而安全公告的协作者可以访问临时私有分支。更多信息,请参阅“向存储库安全公告添加协作者”。

向临时私有分支添加更改

任何拥有安全公告写入权限的用户都可以通过向临时私有分支提交更改来协作修补程序。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在存储库名称下,单击 ** 安全**。如果您看不到“安全”选项卡,请选择 ** **下拉菜单,然后单击 **安全**。

    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.

  3. 在左侧边栏的“报告”下,单击 ** 公告**。

  4. 在“安全建议”列表中,点击您想要处理的安全建议的名称。

  5. 您可以在 GitHub 上或本地进行更改。

    • 要在 GitHub 上进行更改,在“协作修补程序”下,点击**临时私有分支**。然后,创建一个新分支并编辑文件。更多信息,请参见“在您的代码库中创建和删除分支”和“编辑文件”。
    • 要在本地添加更改,请按照“克隆并创建新分支”和“进行更改,然后推送”下的说明操作。

    Screenshot of the "Collaborate on a patch" area of a draft security advisory. The "the temporary private fork" link is outlined in dark orange.

从临时私有分支创建拉取请求

任何对安全建议拥有写入权限的人都可以从临时私有分支创建拉取请求。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在存储库名称下,单击 ** 安全**。如果您看不到“安全”选项卡,请选择 ** **下拉菜单,然后单击 **安全**。

    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.

  3. 在左侧边栏的“报告”下,单击 ** 公告**。

  4. 在“安全建议”列表中,点击您想要创建拉取请求的安全建议的名称。

  5. 滚动到建议表单的底部。然后,在“协作修补程序”下,点击**比较并发起拉取请求**以创建关联分支的拉取请求。

    Screenshot of the "Collaborate on a patch" area of a draft security advisory. The "Compare & pull request" button is outlined in dark orange.
    “打开拉取请求”包含一个标题,显示创建拉取请求时将在三点式 Git diff 比较中进行比较的分支。更多信息,请参见“关于在拉取请求中比较分支”。

  6. 要创建一个准备审查的拉取请求,请点击**创建拉取请求**。要创建一个草稿拉取请求,请使用下拉菜单并选择**创建草稿拉取请求**,然后点击**草稿拉取请求**。如果您是某个组织的成员,您可能需要向组织所有者请求访问草稿拉取请求的权限。请参见“关于拉取请求”。

您无法合并临时私有分支中的单个拉取请求。相反,您需要一次性合并相应的安全建议中的所有打开的拉取请求。更多信息,请参见“合并安全建议中的更改”。

合并安全建议中的更改

任何对安全建议拥有管理员权限的人都可以合并安全建议中的更改。

您无法合并临时私有分支中的单个拉取请求。相反,您需要一次性合并相应的安全建议中的所有打开的拉取请求。

在您可以合并安全建议中的更改之前,临时私有分支中的每个打开的拉取请求都必须是可以合并的。为了保护漏洞信息的安全,状态检查不会在临时私有分支中的拉取请求上运行。更多信息,请参见“关于受保护的分支”。

此外,不能有合并冲突,并且 GitHub 不会强制执行您可能为要将更改合并到的分支设置的任何保护规则。

  1. 在 GitHub 上,导航到存储库的主页。
  2. 在存储库名称下,单击 ** 安全**。如果您看不到“安全”选项卡,请选择 ** **下拉菜单,然后单击 **安全**。
    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.
  3. 在左侧边栏的“报告”下,单击 ** 公告**。
  4. 在“安全建议”列表中,点击您想要合并更改的安全建议的名称。
  5. 滚动到建议表单的底部。然后,在“此建议已准备好合并”下,点击**合并拉取请求(s)**以合并临时私有分支中的所有打开的拉取请求。

Screenshot of the "Collaborate on a patch" area of a draft security advisory. The "Merge pull requests" button is outlined in dark orange.

注意

您只能将一个拉取请求合并到临时私有分支的`main`分支中。如果多个拉取请求都目标`main`分支,则合并将被阻止。

在合并安全建议中的更改后,您可以发布安全建议以提醒您的社区注意项目先前版本中的安全漏洞。更多信息,请参见“发布代码库安全建议”。

进一步阅读