Skip to main content

管理分支保护规则

可创建分支保护规则,为一个或多个分支强制实施某些工作流,例如要求进行审批评审或通过状态检查来确保所有拉取请求都已合并到受保护的分支的。

谁可以使用此功能?

People with admin permissions or a custom role with the "edit repository rules" permission to a repository can manage branch protection rules.

受保护分支适用于具有 GitHub Free 和组织的 GitHub Free 的公共存储库,以及具有 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. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

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

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

  5. 在“Branch name pattern(分支名称模式)”下,输入您要保护的分支名称或模式。

  6. (可选)启用所需的拉取请求。

    注意:如果选择“推送新提交时关闭旧拉取请求审批”和/或“需要审批最近的可评审推送”,则手动为拉取请求创建合并提交并将其直接推送到受保护分支的操作将失败,除非合并内容与 GitHub 为拉取请求生成的合并完全匹配 。

    此外,使用这些设置,如果合并基在提交评审后引入新更改,审批评审将因过时而被关闭。 合并基础是主题分支和基础分支之间的最后一个共同上级的提交。 如果合并基发生更改,则拉取请求在再次审批工作之前无法合并。

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

    • (可选)要在合并拉取请求之前获得批准,请选择“需要审批”。

      选择“合并前所需的批准数”下拉菜单,然后单击分支上要求的审批审阅数。

    • (可选)若要在将代码修改提交推送到分支时关闭拉取请求审批审阅,选择“推送新提交时关闭旧拉取请求审批”。

    • (可选)若要在拉取请求影响具有指定所有者的代码时要求代码所有者审阅,请选择“要求代码所有者审阅”。 有关详细信息,请参阅“关于代码所有者”。

    • (可选)若要让特定参与者在需要时将代码推送到分支而不创建拉取请求,选择“允许指定参与者绕过所需的拉取请求”。 然后,搜索并选择应被允许跳过创建拉取请求的参与者。

    • (可选)如果存储库是组织的一部分,选择“限制可以关闭拉取请求审阅的人员”。 然后,在搜索字段中,搜索并选择有权忽略拉取请求审查的参与者。 有关详细信息,请参阅“忽略拉取请求审查”。

    • (可选)若要要求除最后一个人以外的其他人推送到分支以在合并前批准拉取请求,请选择“需要审批最近的可评审推送”。 有关详细信息,请参阅“关于受保护分支”。

  7. (可选)启用必需状态检查。 有关详细信息,请参阅“关于状态检查”。

    • 选择“合并前需要通过状态检查”。
    • (可选)若要确保使用受保护分支上的最新代码测试拉取请求,选择“要求分支在合并前保持最新”。
    • 在搜索字段中,搜索状态检查,然后选择希望要求进行的检查。
  8. (可选)选择“合并前需要对话解决”。

  9. (可选)选择“需要签名提交”。

  10. (可选)选择“需要线性历史记录”。

  11. (可选)若要使用合并队列合并拉取请求,选择“需要合并队列”。 有关合并队列的详细信息,请参阅“管理合并队列”。

  12. (可选)若要选择在合并之前必须将更改成功部署到哪些环境,选择“需要在合并之前部署成功”,然后选择环境。

  13. (可选)将分支设为只读。

    • 选择“锁定分支”。
    • (可选)若要允许分支同步,请选择“允许分支同步”。
  14. (可选)选择“不允许绕过上述设置” 。

  15. (可选)在 GitHub Free 组织拥有的公共存储库中,以及使用 GitHub Team 或 GitHub Enterprise Cloud 的组织拥有的所有存储库中,启用分支限制。

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

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

    • 选择“所有人”,允许至少具有存储库写入权限的人强制推送到分支,包括具有管理员权限的人员。
    • 选择“指定可以强制推送的人员”,仅允许特定参与者强制推送到分支。 然后,搜索并选择这些参与者。

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

  17. (可选)选择“允许删除”。

  18. 单击“创建”。

编辑分支保护规则

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

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

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

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

  4. 在要编辑的分支保护规则的右侧,单击“编辑”。

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

  6. 单击“保存更改”。

删除分支保护规则

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

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

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

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

  4. 在要删除的分支保护规则的右侧,单击“删除”。