跳至主要内容

管理分支保护规则

您可以创建分支保护规则,以对一个或多个分支强制执行某些工作流程,例如要求对合并到受保护分支的所有拉取请求进行批准审查或通过状态检查。

谁可以使用此功能?

具有管理员权限或在仓库中具有“编辑仓库规则”权限的自定义角色的人员可以管理分支保护规则。

受保护分支在使用 GitHub Free 和 GitHub Free for Organizations 的公共仓库中可用,在使用 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库中可用。有关更多信息,请参阅“GitHub 的计划”。

关于分支保护规则

您可以在仓库中为特定分支、所有分支或与您使用 `fnmatch` 语法指定的名称模式匹配的任何分支创建分支保护规则。例如,要保护包含单词 `release` 的任何分支,您可以为 `*release*` 创建分支规则。

您可以使用通配符语法 `*` 为仓库中的所有当前和未来分支创建规则。由于 GitHub 对 `File.fnmatch` 语法使用 `File::FNM_PATHNAME` 标志,因此 `*` 通配符不匹配目录分隔符 (/)。例如,`qa/*` 将匹配所有以 `qa/` 开头并包含单个斜杠的分支,但不会匹配 `qa/foo/bar`。您可以在 `qa` 后包含任意数量的斜杠,例如 `qa/**/*`,这将匹配例如 `qa/foo/bar/foobar/hello-world`。您还可以扩展 `qa` 字符串,例如 `qa**/**/*`,以使规则更具包容性。

有关语法选项的更多信息,请参阅 fnmatch 文档

注意:分支保护规则不支持 fnmatch 语法中的所有表达式。请注意以下限制

  • 您不能使用反斜杠 (\) 字符作为引用字符,因为 GitHub 不支持在分支保护规则中使用反斜杠。
  • 您可以在方括号 ([]) 中指定字符集,但目前无法使用 ^ 运算符 (例如,[^charset]) 对集进行补全。
  • 虽然 GitHub 支持 fnmatch 语法中的 File::FNM_PATHNAME,但不支持 File::FNM_EXTGLOB

如果一个仓库有多个影响相同分支的受保护分支规则,则包含特定分支名称的规则优先级最高。如果有多个受保护分支规则引用同一个特定分支名称,则最先创建的分支规则优先级更高。

提及特殊字符(如 *?])的受保护分支规则将按创建顺序应用,因此使用这些字符的较旧规则优先级更高。

要对现有分支规则创建例外,您可以创建一个优先级更高的新的分支保护规则,例如针对特定分支名称的分支规则。

有关每种可用分支保护设置的更多信息,请参阅“关于受保护分支”。

注意:一次只能应用一个分支保护规则,这意味着当多个版本的规则针对同一个分支时,很难知道将应用哪个规则。有关分支保护规则替代方案的信息,请参阅“关于规则集”。

创建分支保护规则

创建分支规则时,您指定的规则不需要在仓库中存在。

注意:只有当仓库属于组织时,才能将参与者添加到绕过列表中。

  1. 在 GitHub.com 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

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

  3. 在侧边栏的“代码和自动化”部分,点击 ** 分支**。

  4. 在“分支保护规则”旁边,点击 **添加规则**。

  5. 在“分支名称模式”下,输入要保护的分支名称或模式。

  6. 可选地,启用必需的拉取请求。

    注意

    如果您选择 **在推送新提交时忽略过时的拉取请求批准** 和/或 **要求批准最新的可审查推送**,则手动创建拉取请求的合并提交并将其直接推送到受保护的分支将失败,除非合并的内容与 GitHub 为拉取请求生成的合并完全匹配。

    此外,使用这些设置,如果合并基础在提交审查后引入了新的更改,则批准的审查将被视为过时。合并基础是主题分支和基础分支之间的最后一个共同祖先的提交。如果合并基础发生更改,则拉取请求无法合并,直到有人再次批准工作。

    • 在“保护匹配的分支”下,选择 **合并前要求拉取请求**。

    • 可选地,要要求在拉取请求可以合并之前进行批准,请选择 **要求批准**。

      选择 **合并前所需的批准数量** 下拉菜单,然后点击您希望在分支上要求的批准审查数量。

    • 可选地,要当代码修改提交被推送到分支时忽略拉取请求批准审查,请选择 **在推送新提交时忽略过时的拉取请求批准**。

    • 可选地,要当拉取请求影响具有指定所有者的代码时要求代码所有者的审查,请选择 **要求代码所有者的审查**。请注意,如果代码有多个所有者,则来自 *任何* 代码所有者的批准都足以满足此要求。有关更多信息,请参阅“关于代码所有者”。

    • 可选地,要允许特定参与者在需要拉取请求时将代码推送到分支而无需创建拉取请求,请选择 **允许指定参与者绕过必需的拉取请求**。然后,搜索并选择应该被允许跳过创建拉取请求的参与者。

    • 可选地,如果仓库属于某个组织,请选择 **限制谁可以驳回拉取请求审查**。然后,在搜索栏中搜索并选择允许驳回拉取请求审查的操作者。有关更多信息,请参阅“驳回拉取请求审查”。

    • 可选地,要要求除最后一次推送分支的人员之外的其他人批准拉取请求才能合并,请选择 **要求批准最近可审查的推送**。有关更多信息,请参阅“关于受保护的分支”。

  7. 可选地,启用必需的状态检查。有关更多信息,请参阅“关于状态检查”。

    • 选择 **要求状态检查在合并之前通过**。
    • 可选地,要确保拉取请求使用受保护分支上的最新代码进行测试,请选择 **要求分支在合并之前是最新的**。
    • 在搜索栏中搜索状态检查,选择要要求的检查。
  8. 可选地,选择 **要求合并之前解决对话**。

  9. 可选地,选择 **要求签署提交**。

  10. 可选地,选择 **要求线性历史记录**。

  11. 可选地,要使用合并队列合并拉取请求,请选择 **要求合并队列**。有关合并队列的更多信息,请参阅“管理合并队列”。

  12. 可选地,要选择更改必须成功部署到的环境才能合并,请选择 **要求部署在合并之前成功**,然后选择环境。

  13. 可选地,将分支设为只读。

    • 选择锁定分支
    • 可选地,要允许分支同步,请选择允许分支同步
  14. 可选地,选择不允许绕过上述设置

  15. 可选地,在由 GitHub 免费组织拥有的公共仓库中,以及在由使用 GitHub Team 或 GitHub Enterprise Cloud 的组织拥有的所有仓库中,启用分支限制。

    • 选择限制谁可以推送匹配的分支
    • 可选地,要限制创建匹配的分支,请选择限制创建匹配分支的推送
    • 在搜索字段中,搜索并选择将拥有权限推送至受保护分支或创建匹配分支的人员、团队或应用。
  16. 可选地,在“应用于所有人的规则,包括管理员”下,选择允许强制推送

    然后,选择谁可以强制推送至分支。

    • 选择所有人,允许所有至少拥有仓库写入权限的人员强制推送至分支,包括拥有管理员权限的人员。
    • 选择指定谁可以强制推送,只允许特定操作者强制推送至分支。然后,搜索并选择这些操作者。

    有关强制推送的更多信息,请参阅“关于受保护分支”。

  17. 可选地,选择允许删除

  18. 点击创建

编辑分支保护规则

  1. 在 GitHub.com 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

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

  3. 在侧边栏的“代码和自动化”部分,点击 ** 分支**。

  4. 在要编辑的分支保护规则的右侧,点击编辑

  5. 对分支保护规则进行所需的更改。

  6. 点击保存更改

删除分支保护规则

  1. 在 GitHub.com 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

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

  3. 在侧边栏的“代码和自动化”部分,点击 ** 分支**。

  4. 在要删除的分支保护规则的右侧,点击删除