跳至主要内容

关于规则集

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

谁可以使用此功能?

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

规则集可在具有 GitHub Free 和 GitHub Free for organizations 的公共存储库中使用,也可在具有 GitHub Pro、GitHub Team 和 GitHub Enterprise Cloud 的公共和私有存储库中使用。有关更多信息,请参阅“GitHub 的计划”。

推送规则集可用于 GitHub Team 计划中的内部和私有存储库,以及启用了推送规则集的存储库的分支。

关于规则集

规则集是适用于存储库的命名规则列表。每个存储库最多可以有 75 个规则集。

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

对于使用 GitHub Enterprise 和 GitHub Team 计划的组织,您可以在组织级别设置规则集,以针对组织中的多个存储库。有关更多信息,请参阅 GitHub Enterprise Cloud 文档中的“管理组织中存储库的规则集”。

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

注意

推送规则集处于测试阶段,可能会发生更改。

分支和标签规则集

你可以创建规则集来控制用户如何与存储库中的选定分支和标签进行交互。你可以控制诸如哪些用户可以将提交推送到某个分支,或者哪些用户可以删除或重命名标签等内容。例如,你可以为存储库的 feature 分支设置规则集,要求所有用户(存储库管理员除外)进行签名提交并阻止强制推送。

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

推送规则集

注意

推送规则集处于测试阶段,可能会发生更改。

使用推送规则集,你可以根据文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止推送至私有或内部存储库以及该存储库的整个 fork 网络。

推送规则不需要任何分支定位,因为它们适用于对存储库的每次推送。

推送规则集允许你

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

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

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

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

  • 限制文件大小:防止提交超过指定文件大小限制的内容。

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

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

对于分叉仓库,只有在根仓库中拥有绕过权限的人员才拥有推送规则的绕过权限。

关于规则集、受保护分支和受保护标签

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

此外,您可以将现有的标签保护规则导入仓库规则集。这将实现您当前为仓库设置的相同标签保护。有关更多信息,请参阅“配置标签保护规则”。

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

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

使用规则集执行状态

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

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

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

关于规则分层

规则集没有优先级。相反,如果多个规则集针对存储库中的同一分支或标签,则会聚合这些规则集中的每个规则。如果在聚合的规则集中以不同的方式定义了相同的规则,则应用该规则的最严格版本。除了彼此分层之外,规则集还会与针对同一分支或标签的保护规则分层。

例如,考虑以下针对存储库 octo-org/octo-repomy-feature 分支的情况。

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

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