跳至主要内容

关于规则集

规则集可帮助您控制人员如何与仓库中的分支和标签进行交互。

谁可以使用此功能?

任何具有仓库读取权限的人员都可以查看仓库的规则集。具有仓库管理员权限或具有“编辑仓库规则”权限的自定义角色的人员可以创建、编辑和删除仓库的规则集。

规则集在使用 GitHub Free 和 GitHub Free for organizations 的公共仓库以及使用 GitHub Pro、GitHub Team 和 GitHub Enterprise Cloud 的公共和私有仓库中可用。有关更多信息,请参阅“GitHub 的方案”。

推送规则集在内部和私有仓库以及启用了推送规则集的仓库的分支中,对于 GitHub Team 方案可用。

关于规则集

规则集是应用于仓库的一组命名规则列表。每个仓库最多可以有 75 个规则集。

创建规则集时,您可以允许某些用户绕过规则集中的规则。这可以是具有特定角色的用户(例如仓库管理员),也可以是特定的团队或 GitHub Apps。有关授予绕过权限的更多信息,请参阅“为仓库创建规则集”。

对于使用 GitHub Enterprise 方案的组织,您可以在组织级别设置规则集以定位组织中的多个仓库。有关更多信息,请参阅 GitHub Enterprise Cloud 文档中的“管理组织中仓库的规则集”。

您可以使用规则集来定位仓库中的分支或标签,或阻止对仓库及其整个分支网络的推送。

分支和标签规则集

您可以创建规则集来控制人员如何与仓库中选定的分支和标签进行交互。您可以控制诸如谁可以将提交推送到特定分支或谁可以删除或重命名标签之类的事情。例如,您可以为仓库的 feature 分支设置一个规则集,该规则集要求签名的提交并阻止除仓库管理员以外的所有用户的强制推送。

对于您创建的每个规则集,您都会指定规则集应用于仓库中的哪些分支或标签。您可以使用 fnmatch 语法定义模式以定位特定的分支和标签。例如,您可以使用模式 releases/**/* 来定位仓库中名称以字符串 releases/ 开头的所有分支。有关 fnmatch 语法的更多信息,请参阅“为仓库创建规则集”。

推送规则集

使用推送规则集,您可以根据文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止对私有或内部仓库及其整个分支网络的推送。

推送规则不需要任何分支目标,因为它们应用于对仓库的每次推送。

推送规则集允许您

  • 限制文件路径:防止包含指定文件路径中更改的提交被推送。

    您可以为此使用 fnmatch 语法。例如,针对 test/demo/**/* 的限制会阻止对 test/demo/ 目录中任何文件或文件夹的任何推送。针对 test/docs/pushrules.md 的限制会阻止专门对 test/docs/ 目录中的 pushrules.md 文件进行推送。有关更多信息,请参阅“为仓库创建规则集”。

  • 限制文件路径长度:防止包含超过指定字符限制的文件路径的提交被推送。

  • 限制文件扩展名:防止包含具有指定文件扩展名的文件的提交被推送。

  • 限制文件大小:防止超过指定文件大小限制的提交被推送。

关于分支仓库的推送规则集

推送规则应用于仓库的整个分支网络,确保对仓库的每个入口点都受到保护。例如,如果您分支了一个启用了推送规则集的仓库,则相同的推送规则集也将应用于您的分支仓库。

对于分支仓库,唯一具有推送规则绕过权限的人员是根仓库中具有绕过权限的人员。

关于规则集和受保护分支

规则集与仓库中的任何分支保护规则一起使用。您可以在规则集中定义的许多规则类似于保护规则,您可以开始使用规则集而无需覆盖任何现有的保护规则。

规则集相对于分支保护规则具有以下优势。

  • 与保护规则不同,多个规则集可以同时应用,因此您可以确信,当有人与仓库中的分支交互时,每个针对该分支的规则都将被评估。请参阅“关于规则分层”。
  • 规则集具有状态,因此您可以轻松管理哪些规则集在仓库中处于活动状态,而无需删除规则集。
  • 任何具有仓库读取权限的人员都可以查看仓库的活动规则集。这意味着开发人员可以了解他们为什么遇到规则,或者审计员可以检查仓库的安全约束,而无需仓库管理员权限。
  • 您可以创建其他规则来控制进入仓库的提交的元数据,例如提交消息和作者的电子邮件地址。请参阅 GitHub Enterprise Cloud 文档中的“规则集的可用规则”。

使用规则集执行状态

在创建或编辑规则集时,您可以使用执行状态来配置规则集的执行方式。

您可以为规则集选择以下任何执行状态。

  • 活动:您的规则集将在创建后执行。
  • 禁用:您的规则集将不会执行。

关于规则分层

规则集没有优先级。相反,如果多个规则集定位仓库中的同一分支或标签,则每个规则集中的规则将被聚合。如果在聚合的规则集中以不同的方式定义了相同的规则,则应用规则的最严格版本。规则集除了相互分层外,还与针对同一分支或标签的保护规则分层。

例如,考虑 octo-org/octo-repo 仓库的 my-feature 分支的以下情况。

  • 仓库管理员已设置了一个针对 my-feature 分支的规则集。此规则集要求签名的提交,并且在合并之前需要三个拉取请求审查。
  • my-feature 分支的现有分支保护规则要求线性提交历史记录,并且在合并之前需要两个拉取请求审查。

每个来源的规则都被聚合,并且所有规则都适用。在存在多个不同版本的同一规则的情况下,结果是应用规则的最严格版本。因此,my-feature 分支需要签名的提交和线性提交历史记录,并且针对该分支的拉取请求在合并之前需要三个审查。