Skip to main content

创建组织中存储库的规则集

可以创建一个规则集,以将组织中的多个存储库作为目标。

谁可以使用此功能?

Organization owners can create rulesets at the organization level.

简介

对于订阅 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 文档

使用规则集强制实施状态

创建或编辑规则集时,可以使用强制状态来配置规则集的强制实施方式。

可以为规则集选择以下任何强制状态。

  • 活动:规则集创建后便会强制实施。****
  • 已禁用:不会强制实施规则集。****

创建分支或标签规则集

  1. 在 GitHub 的右上角,选择个人资料照片,然后单击“ 你的组织”****。

  2. 在组织旁边,单击“设置”。

  3. 在左侧边栏的“代码、规划和自动化”部分,单击“ 存储库”,然后单击“规则集”。********

    组织的设置页面的屏幕截图。 在边栏中,标有“规则集”的链接以橙色轮廓突出显示。

  4. 单击“添加规则集”。****

  5. 若要创建面向分支的规则集,请单击“新建分支规则集”。 或者,若要创建针对标签的规则集,请单击“新建标签规则集”****。

  6. 在“规则集名称”下,键入规则集的名称。

  7. (可选)若要更改默认强制实施状态,请单击 “已禁用”**** 并选择强制实施状态。 有关强制状态的详细信息,请参阅关于规则集

选择要在组织中作为目标的存储库

使用规则集,可以选择针对组织中的所有存储库、组织中符合特定命名约定的存储库、组织中具有自定义属性的存储库,或组织中手动选择的存储库列表。

有关自定义属性的详细信息,请参阅 管理组织中存储库的自定义属性

如果存储库由组织级别创建的规则集作为目标,则只有组织所有者才能编辑此规则集。 但是,对存储库具有管理员访问权限或具有自定义角色(包括“编辑存储库规则”权限)的人员,可以在存储库级别创建其他规则集。 这些规则集中的规则将与在组织级别指定的规则合并。 结果是,创建新规则集可以使将分支或标记作为目标的规则更具限制性,但限制性永远不会降低。 有关创建规则集的详细信息,请参阅 关于规则集

按属性将组织中的存储库作为目标

可以按自定义属性将组织中的存储库作为目标。 请参阅“管理组织中存储库的自定义属性”。

  1. 若要按属性以组织中的动态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“Repositories matching a filter”****。
  2. 若要添加目标,请在筛选器部分输入查询,例如 visibility:private props.team:infra -language:java,或单击“Select by filter”********。
  3. 在出现的模式对话框中,从下拉菜单中选择自定义或系统属性,然后选择每个属性的值。
  4. 单击“应用”。

将组织中的所有存储库作为目标

若要以组织中的所有存储库为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“All repositories”****。

将组织中的选定存储库作为目标

  1. 若要以组织中的手动选择的静态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边,选择“Only selected repositories”****。
  2. 若要选择存储库作为目标,请在“Targeting criteria”部分选择“ Select repositories”,然后搜索要将其作为目标的每个存储库的名称****。 从搜索结果中选择每个存储库。

按组织中的命名约定将存储库作为目标

  1. 若要按命名约定以组织中的动态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“Repositories matching a name”****。

  2. 若要开始定义目标模式,请在“Targeting criteria”部分中,选择“Add a target”,然后单击“Include by pattern”或“Exclude by pattern”************。

  3. 在出现的模式对话框中,使用 fnmatch 语法输入存储库命名模式,然后单击“添加包含模式”或“添加排除模式”。******** 有关 fnmatch 语法的详细信息,请参阅使用 fnmatch 语法

    注意

    可以将多个目标条件添加到同一规则集。 例如,可以包含与 *cat* 模式匹配的任何存储库,然后专门排除与 not-a-cat 模式匹配的存储库。

  4. (可选)在规则集配置页上,选择“阻止重命名目标存储库”。****

选择要作为目标的分支或标签

若要定位分支或标记,在“目标分支”或“目标标记”部分,选择“添加目标”****,然后选择包含或排除分支或标记的方式。 可以使用 fnmatch 语法基于模式包含或排除分支或标记。 有关详细信息,请参阅“使用 fnmatch 语法”。

可以将多个目标条件添加到同一规则集。 例如,可以包含默认分支,包含与模式 *feature* 匹配的任何分支,然后专门排除与模式 not-a-feature 匹配的分支。

选择分支或标记保护

在“分支保护”或“标记保护”部分中,选择要包含在规则集中的规则。 选择规则时,可以输入规则的其他设置。 有关规则的详细信息,请参阅“规则集的可用规则”。

注意

如果选择“Require status checks before merging”,请在“Additional settings”部分执行以下操作:****

  • 可以输入所需的每个状态检查的名称。 若要完成添加状态检查作为要求,必须单击
  • 如果选择“合并前要求分支保持最新状态”,则必须定义检查才能使保护生效。

完成分支或标签规则集和后续步骤

单击“创建****”即可完成规则集的创建。 如果规则集的强制执行状态设置为“活动”,规则集会立即生效。

创建推送规则集

注意

此规则集将强制实施存储库整个分支网络的推送限制。

你可以为组织中的专用或内部存储库创建推送规则集。

  1. 在 GitHub 的右上角,选择个人资料照片,然后单击“ 你的组织”****。

  2. 在组织旁边,单击“设置”。

  3. 在左侧边栏的“代码、规划和自动化”部分,单击“ 存储库”,然后单击“规则集”。********

    组织的设置页面的屏幕截图。 在边栏中,标有“规则集”的链接以橙色轮廓突出显示。

  4. 单击“添加规则集”。****

  5. 若要创建针对分支的规则集,请单击“新建推送规则集”****。

  6. 在“规则集名称”下,键入规则集的名称。

  7. (可选)若要更改默认强制实施状态,请单击 “已禁用”**** 并选择强制实施状态。 有关强制状态的详细信息,请参阅关于规则集

为推送规则集授予旁路权限

注意

针对存储库的推送规则集的旁路权限将由此存储库的整个分支网络继承。 这意味着,在此存储库的整个分支网络中,唯一可以绕过此规则集的用户是在根存储库中可以绕过此规则集的用户。

你可以授予特定角色、团队或应用绕过权限 的功能。 以下项符合绕过访问的条件:

  • 存储库管理员、组织所有者和企业所有者
  • 维护或写入角色,或是基于写入角色的自定义存储库角色
  • 团队
  • GitHub Apps
  • Dependabot。 有关 Dependabot 的详细信息,请参阅“Dependabot 快速入门指南”。
  1. 若要授予规则集的绕过权限,请在“Bypass list”部分中单击 “Add bypass”****。
  2. 在显示的“添加绕过”模式对话框中,搜索要授予绕过权限的角色、团队或应用,然后从“建议”部分选择角色、团队或应用,然后单击“添加所选”****。

选择要在组织中作为目标的存储库

使用规则集,可以选择针对组织中的所有存储库、组织中符合特定命名约定的存储库、组织中具有自定义属性的存储库,或组织中手动选择的存储库列表。

有关自定义属性的详细信息,请参阅 管理组织中存储库的自定义属性

如果存储库由组织级别创建的规则集作为目标,则只有组织所有者才能编辑此规则集。 但是,对存储库具有管理员访问权限或具有自定义角色(包括“编辑存储库规则”权限)的人员,可以在存储库级别创建其他规则集。 这些规则集中的规则将与在组织级别指定的规则合并。 结果是,创建新规则集可以使将分支或标记作为目标的规则更具限制性,但限制性永远不会降低。 有关创建规则集的详细信息,请参阅 关于规则集

按属性将组织中的存储库作为目标

可以按自定义属性将组织中的存储库作为目标。 请参阅“管理组织中存储库的自定义属性”。

  1. 若要按属性以组织中的动态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“Repositories matching a filter”****。
  2. 若要添加目标,请在筛选器部分输入查询,例如 visibility:private props.team:infra -language:java,或单击“Select by filter”********。
  3. 在出现的模式对话框中,从下拉菜单中选择自定义或系统属性,然后选择每个属性的值。
  4. 单击“应用”。

将组织中的所有存储库作为目标

若要以组织中的所有存储库为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“All repositories”****。

将组织中的选定存储库作为目标

  1. 若要以组织中的手动选择的静态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边,选择“Only selected repositories”****。
  2. 若要选择存储库作为目标,请在“Targeting criteria”部分选择“ Select repositories”,然后搜索要将其作为目标的每个存储库的名称****。 从搜索结果中选择每个存储库。

按组织中的命名约定将存储库作为目标

  1. 若要按命名约定以组织中的动态存储库列表为目标,请在“Target repositories”部分的“Repository targeting criteria”旁边选择“Repositories matching a name”****。

  2. 若要开始定义目标模式,请在“Targeting criteria”部分中,选择“Add a target”,然后单击“Include by pattern”或“Exclude by pattern”************。

  3. 在出现的模式对话框中,使用 fnmatch 语法输入存储库命名模式,然后单击“添加包含模式”或“添加排除模式”。******** 有关 fnmatch 语法的详细信息,请参阅使用 fnmatch 语法

    注意

    可以将多个目标条件添加到同一规则集。 例如,可以包含与 *cat* 模式匹配的任何存储库,然后专门排除与 not-a-cat 模式匹配的存储库。

  4. (可选)在规则集配置页上,选择“阻止重命名目标存储库”。****

选择推送保护

你可以阻止对此存储库以及对此存储库整个分支网络的推送,具体取决于文件扩展名、文件路径长度、文件和文件夹路径以及文件大小。

配置的任何推送保护都会阻止此存储库中的推送,并在此存储库的整个分支网络中阻止推送。

  1. 在“推送保护”下,单击你要应用的限制。 然后填写你所选限制的详细信息。

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

完成推送规则集和后续步骤

单击“创建****”即可完成规则集的创建。 如果规则集的强制执行状态设置为“活动”,规则集会立即生效。