简介
对于使用 GitHub Team 或 GitHub Enterprise 计划的客户,您可以在组织中创建规则集,以控制用户如何与组织内的仓库交互。您可以管理诸如谁可以向特定分支推送提交以及提交必须采用何种格式,或谁可以删除或重命名标签等内容。您还可以阻止他人重命名仓库。
您也可以创建推送规则集,以阻止向私有或内部仓库以及该仓库的整个分叉网络进行推送。推送规则集允许您根据文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止推送。
分叉不会从其上游仓库继承分支或标签规则集。但是,属于您组织的分叉会受到您创建的规则集的约束,行为与其他仓库相同。
分叉 会 继承推送规则集。推送规则适用于仓库整个分叉网络,确保对仓库的所有入口点都受到保护。例如,如果您分叉了一个已启用推送规则集的仓库,则相同的推送规则集也会应用于您的分叉仓库。
对于分叉仓库,唯一拥有推送规则绕过权限的人是根仓库中拥有绕过权限的人。
导入预构建规则集
要导入 GitHub 提供的预构建规则集,请参阅 github/ruleset-recipes。
您可以使用 JSON 文件导入已有的规则集。如果您想将相同的规则集应用于多个仓库或组织,这会很有用。更多信息,请参阅 在组织中管理仓库的规则集。
使用 fnmatch 语法
创建规则集时,您可以使用 fnmatch 语法定义要匹配的模式。
您可以使用 * 通配符匹配任意字符串。由于 GitHub 为 File.fnmatch 语法使用了 File::FNM_PATHNAME 标志,* 通配符不会匹配目录分隔符(/)。例如,qa/* 将匹配所有以 qa/ 开头且仅包含一个斜杠的分支,但不会匹配 qa/foo/bar。您可以使用 qa/**/* 在 qa 之后包含任意数量的斜杠,这将匹配例如 qa/foo/bar/foobar/hello-world。还可以使用 qa**/**/* 扩展 qa 字符串,使规则更具包容性。
有关语法选项的更多信息,请参阅 fnmatch 文档。
使用规则集强制状态
在创建或编辑规则集时,您可以使用强制状态来配置规则集的执行方式。
您可以为规则集选择以下任意一种强制状态。
- 激活: 您的规则集将在创建时生效。
- 禁用: 您的规则集将不会生效。
创建分支或标签规则集
-
在 GitHub 右上角,点击您的个人头像,然后点击 组织。
-
点击即可选择组织。
-
在组织名称下,点击 设置。如果看不到“设置”选项卡,请选择 下拉菜单,然后点击 设置。

-
在左侧边栏的 “代码、规划和自动化” 部分,点击 仓库,然后点击 规则集。

-
点击 新建规则集。
-
若要创建针对分支的规则集,点击 新建分支规则集。若要创建针对标签的规则集,点击 新建标签规则集。
-
在“规则集名称”下,输入规则集的名称。
-
如果想更改默认执行状态,点击 已禁用并选择一个执行状态。
选择在组织中要针对的仓库
使用规则集,您可以选择针对组织中的全部仓库,或手动选择的仓库列表。您还可以按命名约定、部署上下文或自定义属性进行过滤。
有关自定义属性的更多信息,请参阅 在组织中管理仓库的自定义属性。
如果仓库被组织层级创建的规则集所针对,只有组织所有者可以编辑该规则集。不过,拥有仓库管理员权限的人员,或拥有包含“编辑仓库规则”权限的自定义角色,可以在仓库层级创建额外的规则集。这些规则集中的规则会与组织层级定义的规则合并。结果是,创建新规则集可以使针对分支或标签的规则变得更严格,但永远不会变得更宽松。更多关于创建规则集的信息,请参阅 规则集简介。
按组织属性定位仓库
您可以按自定义属性定位组织中的仓库。请参阅 在组织中管理仓库的自定义属性。
- 要通过属性在组织中定位动态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 匹配过滤器的仓库。
- 要添加目标,请在过滤器区域 输入查询,例如
visibility:private props.team:infra -language:java,或 通过过滤器选择。 - 在弹出的模态对话框中,从下拉菜单中选择自定义或系统属性,然后为每个属性选择一个值。
- 点击应用。
定位组织中的全部仓库
要定位组织中的全部仓库,请在“定位仓库”部分的“仓库定位条件”旁选择 全部仓库。
定位组织中选定的仓库
- 要定位组织中手动选择的静态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 仅选定的仓库。
- 要选择要定位的仓库,请在“定位条件”部分点击 选择仓库,随后搜索您想要定位的每个仓库的名称。从搜索结果中选择相应的仓库。
按组织中的命名约定定位仓库
-
要通过命名约定定位组织中的动态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 匹配名称的仓库。
-
要开始定义定位模式,请在“定位条件”部分选择 添加目标,然后点击 通过模式包含 或 通过模式排除。
-
在弹出的模态对话框中,使用
fnmatch语法输入仓库命名模式,然后点击 添加包含模式 或 添加排除模式。有关fnmatch语法的更多信息,请参阅 使用fnmatch语法。注意
您可以在同一个规则集中添加多个定位条件。例如,您可以包含所有匹配模式
*cat*的仓库,然后专门排除匹配模式not-a-cat的仓库。 -
如果需要,在规则集配置页面上,勾选 阻止对目标仓库进行重命名。
按部署上下文定位仓库
如果您的组织已在“链接工件”页面添加记录,您可以定位可部署的(拥有活动存储记录)或已部署的(拥有活动部署记录)仓库。请参阅 关于链接工件。
- 在“定位仓库”部分的“仓库定位条件”旁选择 匹配过滤器的仓库。
- 在 匹配过滤器的仓库 旁,点击图标。
- 使用
deployed:true或deployable:true过滤器来定位仓库。 - 点击应用。
选择要定位的分支或标签
要定位分支或标签,请在“定位分支”或“定位标签”部分点击 添加目标,随后选择您希望包含或排除的方式。您可以使用 fnmatch 语法基于模式包含或排除分支或标签。更多信息,请参阅 使用 fnmatch 语法。
您可以在同一个规则集中添加多个定位条件。例如,您可以包括默认分支,包含所有匹配模式 *feature* 的分支,然后专门排除匹配模式 not-a-feature 的分支。
选择分支或标签保护
在“分支保护”或“标签保护”部分,选择您想在规则集中包含的规则。选择规则后,您可能可以为该规则输入附加设置。有关这些规则的更多信息,请参阅 规则集可用规则。
注意
如果您选择 合并前要求状态检查,在“附加设置”部分
- 您可以输入希望要求的每个状态检查的名称。要完成将状态检查添加为必需项,必须点击.
- 如果您选择 合并前要求分支为最新状态,则必须定义检查才能使保护生效。
完成分支或标签规则集并查看后续步骤
要完成规则集的创建,点击 创建。如果规则集的执行状态设置为“已激活”,则规则集会立即生效。
创建推送规则集
注意
此规则集将在整个仓库的分叉网络中强制推送限制。
您可以为组织中的私有或内部仓库创建推送规则集。
-
在 GitHub 右上角,点击您的个人头像,然后点击 组织。
-
点击即可选择组织。
-
在组织名称下,点击 设置。如果看不到“设置”选项卡,请选择 下拉菜单,然后点击 设置。

-
在左侧边栏的 “代码、规划和自动化” 部分,点击 仓库,然后点击 规则集。

-
点击 新建规则集。
-
要创建针对分支的规则集,请点击 新建推送规则集。
-
在“规则集名称”下,输入规则集的名称。
-
如果想更改默认执行状态,点击 已禁用并选择一个执行状态。
为您的推送规则集授予绕过权限
注意
针对仓库的推送规则集的绕过权限将被该仓库整个分叉网络继承。这意味着,在该仓库整个分叉网络中,唯一能够绕过此规则集的用户,是在根仓库中能够绕过此规则集的用户。
您可以为特定角色、团队或应用授予规则集的绕过权限。以下对象有资格获得绕过访问权限
- 仓库管理员、组织所有者和企业所有者
- 维护或写入角色,或基于写入角色的自定义仓库角色
- 团队(不包括秘密团队)。请参阅 关于组织团队。
- GitHub Apps
- Dependabot。有关 Dependabot 的更多信息,请参阅 Dependabot 快速入门指南。
- 要为规则集授予绕过权限,请在“绕过列表”部分点击 添加绕过。
- 在弹出的“添加绕过”模态对话框中,搜索您想授予绕过权限的角色、团队或应用,然后从“建议”部分选择相应的角色、团队或应用并点击 添加已选。
选择在组织中要针对的仓库
使用规则集,您可以选择针对组织中的全部仓库,或手动选择的仓库列表。您还可以按命名约定、部署上下文或自定义属性进行过滤。
有关自定义属性的更多信息,请参阅 在组织中管理仓库的自定义属性。
如果仓库被组织层级创建的规则集所针对,只有组织所有者可以编辑该规则集。不过,拥有仓库管理员权限的人员,或拥有包含“编辑仓库规则”权限的自定义角色,可以在仓库层级创建额外的规则集。这些规则集中的规则会与组织层级定义的规则合并。结果是,创建新规则集可以使针对分支或标签的规则变得更严格,但永远不会变得更宽松。更多关于创建规则集的信息,请参阅 规则集简介。
按组织属性定位仓库
您可以按自定义属性定位组织中的仓库。请参阅 在组织中管理仓库的自定义属性。
- 要通过属性在组织中定位动态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 匹配过滤器的仓库。
- 要添加目标,请在过滤器区域 输入查询,例如
visibility:private props.team:infra -language:java,或 通过过滤器选择。 - 在弹出的模态对话框中,从下拉菜单中选择自定义或系统属性,然后为每个属性选择一个值。
- 点击应用。
定位组织中的全部仓库
要定位组织中的全部仓库,请在“定位仓库”部分的“仓库定位条件”旁选择 全部仓库。
定位组织中选定的仓库
- 要定位组织中手动选择的静态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 仅选定的仓库。
- 要选择要定位的仓库,请在“定位条件”部分点击 选择仓库,随后搜索您想要定位的每个仓库的名称。从搜索结果中选择相应的仓库。
按组织中的命名约定定位仓库
-
要通过命名约定定位组织中的动态仓库列表,请在“定位仓库”部分的“仓库定位条件”旁选择 匹配名称的仓库。
-
要开始定义定位模式,请在“定位条件”部分选择 添加目标,然后点击 通过模式包含 或 通过模式排除。
-
在弹出的模态对话框中,使用
fnmatch语法输入仓库命名模式,然后点击 添加包含模式 或 添加排除模式。有关fnmatch语法的更多信息,请参阅 使用fnmatch语法。注意
您可以在同一个规则集中添加多个定位条件。例如,您可以包含所有匹配模式
*cat*的仓库,然后专门排除匹配模式not-a-cat的仓库。 -
如果需要,在规则集配置页面上,勾选 阻止对目标仓库进行重命名。
按部署上下文定位仓库
如果您的组织已在“链接工件”页面添加记录,您可以定位可部署的(拥有活动存储记录)或已部署的(拥有活动部署记录)仓库。请参阅 关于链接工件。
- 在“定位仓库”部分的“仓库定位条件”旁选择 匹配过滤器的仓库。
- 在 匹配过滤器的仓库 旁,点击图标。
- 使用
deployed:true或deployable:true过滤器来定位仓库。 - 点击应用。
选择推送保护
您可以根据文件扩展名、文件路径长度、文件与文件夹路径以及文件大小,阻止向该仓库及其整个分叉网络进行推送。
您配置的任何推送保护都会阻止该仓库以及整个分叉网络中的推送。
-
在“推送保护”下,点击您想应用的限制。随后填写所选限制的详细信息。
对于文件路径限制,您可以使用部分路径或完整路径。您可以使用
fnmatch语法。例如,限制test/demo/**/*会阻止向test/demo/目录中的任何文件或文件夹进行推送。限制test/docs/pushrules.md会专门阻止向test/docs/目录下的pushrules.md文件进行推送。更多信息,请参阅 为仓库创建规则集。
完成推送规则集并查看后续步骤
要完成规则集的创建,点击 创建。如果规则集的执行状态设置为“已激活”,则规则集会立即生效。