关于规则集
规则集是适用于存储库或组织中多个存储库的规则的命名列表,适用于客户 GitHub Team 和 GitHub Enterprise 计划。 可以为每个存储库配置最多 75 个规则集,以及 75 个组织范围的规则集。
创建规则集时,可以允许某些用户绕过规则集中的规则。 这可以是具有特定角色的用户,例如存储库管理员,也可以是特定的团队或 GitHub Apps。 有关授予旁路权限的详细信息,请参阅“创建存储库的规则集”。
对于使用GitHub Enterprise计划的组织,可以在组织级设置规则集,以便针对组织中的多个存储库。 请参阅管理您组织存储库的规则集在GitHub Enterprise Cloud文档中。
你可以使用规则集针对存储库中的分支或标签,或者阻止对存储库和存储库的整个分支网络的推送。
分支和标签规则集
可以创建规则集来控制用户如何与存储库中的选定分支和标记交互。 可以控制哪些人员可以将提交推送到特定分支提交的格式,或者谁可以删除或重命名标记。 例如,可以为存储库的 feature 分支设置一个规则集,针对除存储库管理员以外的所有用户要求签名提交和阻止强制推送。
对于你创建的每个规则集,可以指定存储库 规则集适用于这些规则集。 可以使用 fnmatch 语法来定义面向特定 分支和标记的模式。 例如,可以使用 releases/**/* 模式来面向存储库中名称以字符串 releases/ 开头的所有分支。 有关 fnmatch 语法的详细信息,请参阅“创建存储库的规则集”。
推送规则集
使用推送规则集,可以阻止对专用或内部存储库的推送,以及对此存储库整个分支网络的推送,具体取决于文件扩展名、文件路径长度、文件和文件夹路径以及文件大小。
推送规则不需要针对任何分支,因为它们会应用于对存储库的每条推送。
推送规则集允许你:
-
限制文件路径:阻止推送包含指定文件路径更改的提交。
可以为此使用
fnmatch语法。 例如,针对test/demo/**/*的限制可阻止对test/demo/目录中的文件或文件夹进行任何推送。 针对test/docs/pushrules.md的限制可阻止对pushrules.md目录中test/docs/文件的专门推送。 有关详细信息,请参阅“创建存储库的规则集”。 -
限制文件路径长度:阻止推送包含超过指定字符限制的文件路径的提交。
-
限制文件扩展名:阻止推送包含具有指定文件扩展名的文件的提交。
-
限制文件大小:阻止推送超过指定文件大小限制的提交。
关于向已创建分支的存储库推送规则集
推送规则适用于存储库的整个分支网络,以确保存储库的每个入口点均受到保护。 例如,如果将已启用推送规则集的存储库创建为分支,则相同的推送规则集也适用于已创建分支的存储库。
对于已创建分支的存储库,只有对推送规则具有旁路权限的人员是根存储库中具有旁路权限的人员。
关于规则集和受保护的分支
规则集与存储库中的任何分支保护规则共同产生作用。 可在规则集中定义的许多规则都与保护规则类似,使用规则集时无需重写任何现有保护规则。
与分支保护规则相比,规则集具有以下优势。
- 与保护规则不同,多个规则集可以同时应用,因此可以确信当有人与该分支交互时,将评估存储库中面向分支的每个规则。 请参阅关于规则分层。
- 规则集有状态,以便用户可以轻松管理存储库中处于活动状态的规则集,而无需删除规则集。
- 对存储库具有读取访问权限的任何人都可以查看处于活动状态的存储库规则集。 这意味着开发人员可以了解因何触发了规则,或审核员可以检查存储库的安全约束,而无需存储库的管理员访问权限。
- 你可以创建更多规则来控制进入存储库的提交的元数据,例如提交消息和作者的电子邮件地址。 请参阅 规则集的可用规则 在GitHub Enterprise Cloud文档中。
使用规则集强制实施状态
创建或编辑规则集时,可以使用强制状态来配置规则集的强制实施方式。
可以为规则集选择以下任何强制状态。
- Active:规则集创建后便会强制实施。****
- Disabled:不会强制实施规则集。****
关于规则分层
规则集没有优先级。 如果多个规则集适用于存储库中的同一分支或标记,会将每个规则集中的规则进行聚合。 如果在聚合的规则集中同一规则以不同方式定义,则会应用该规则的最严格版本。 除了相互叠加外,规则集还与针对同一分支或标签的保护规则进行分层。
例如,对于 my-feature 存储库的 octo-org/octo-repo 分支,请考虑以下情况。
- 存储库的管理员已设置一个面向
my-feature分支的规则集。 此规则集要求签名提交,并对拉取请求进行三次评审,然后才能合并拉取请求。 - 现有的
my-feature分支保护规则要求提交历史记录为线性,并且在拉取请求合并之前必须经过两次评审。
会将每个源中的规则进行聚合,并应用所有规则。 如果存在同一规则的多个不同版本,结果将是应用该规则的最严格版本。 因此, my-feature 分支需要签名的提交和线性提交历史记录阻止,并且针对分支的拉取请求需要三个评审才能合并。