跳至主要内容

为仓库创建规则集

您可以向仓库添加规则集,以控制人们如何与特定分支和标签进行交互。

谁可以使用此功能?

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

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

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

简介

您可以创建规则集来控制用户如何与存储库中的选定分支和标签进行交互。您可以控制诸如谁可以将提交推送到特定分支以及提交必须如何格式化,或者谁可以删除或重命名标签。您还可以阻止人们重命名存储库。

您还可以创建推送规则集来阻止推送到私有或内部存储库以及存储库的整个分叉网络。推送规则集允许您根据文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止推送。

注意

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

创建规则集时,您可以允许某些用户绕过规则集中的规则。

有关规则集的更多信息,请参阅“关于规则集”。

导入预构建规则集

要导入 GitHub 的预构建规则集之一,请参阅 github/ruleset-recipes

使用 fnmatch 语法

您可以使用 fnmatch 语法来定义创建规则集时要定位的模式。

您可以使用 * 通配符来匹配任何字符串。由于 GitHub 对 File.fnmatch 语法使用 File::FNM_PATHNAME 标志,因此 * 通配符不匹配目录分隔符 (/)。例如,qa/* 将匹配所有以 qa/ 开头且包含单个斜杠的分支,但不会匹配 qa/foo/bar。您可以使用 qa/**/*qa 之后包含任意数量的斜杠,这将匹配例如 qa/foo/bar/foobar/hello-world。您还可以使用 qa**/**/* 扩展 qa 字符串以使规则更具包容性。

有关语法选项的更多信息,请参阅 fnmatch 文档

注意:并非所有来自 fnmatch 语法的表达式都受分支保护规则支持。请注意以下约束

  • 您不能使用反斜杠 (\) 字符作为引用字符,因为 GitHub 不支持在分支保护规则中使用反斜杠。
  • 您可以在方括号 ([]) 内指定字符集,但目前无法使用 ^ 运算符对集合进行补集操作(例如,[^charset])。
  • 虽然 GitHub 在 fnmatch 语法中支持 File::FNM_PATHNAME,但 File::FNM_EXTGLOB 不受支持。

使用规则集强制执行状态

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

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

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

创建分支或标签规则集

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 设置。如果您看不到“设置”选项卡,请选择下拉菜单,然后单击设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在左侧边栏中,在“代码和自动化”下,单击规则,然后单击规则集

    Screenshot of the sidebar of the "Settings" page for a repository. The "Rules" sub-menu is expanded, and the "Rulesets" option is outlined in orange.

  4. 单击新建规则集

  5. 要创建针对分支的规则集,请单击新建分支规则集

  6. 或者,要创建针对标签的规则集,请单击新建标签规则集

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

  8. 可选地,要更改默认的强制执行状态,请单击 禁用 并选择一个强制执行状态。有关强制执行状态的更多信息,请参阅“关于规则集”。

授予分支或标签规则集的绕过权限

您可以为规则集授予某些角色、团队或应用程序绕过权限。以下人员有资格获得绕过访问权限

  • 存储库管理员或组织所有者
  • 维护或写入角色,或基于写入角色的自定义存储库角色
  • 团队
  • 部署密钥
  • GitHub 应用程序
  • Dependabot。有关 Dependabot 的更多信息,请参阅“Dependabot 快速入门指南”。
  1. 要授予规则集的绕过权限,请在“绕过列表”部分中单击 添加绕过.

  2. 在出现的“添加绕过”模态对话框中,搜索您要授予绕过权限的角色、团队或应用程序,然后从“建议”部分选择角色、团队或应用程序,并点击**添加选中项**。

  3. 可选地,要授予绕过权限给某个参与者,但不允许他们直接推送到仓库,请在“始终允许”的右侧点击 ,然后点击**仅限拉取请求**。

    现在,选定的参与者需要打开拉取请求才能对仓库进行更改,从而在拉取请求和审计日志中创建其更改的清晰轨迹。然后,参与者可以选择绕过任何分支保护并合并该拉取请求。

选择要定位的分支或标签

要定位分支或标签,请在“目标分支”或“目标标签”部分选择**添加目标**,然后选择您要如何包含或排除分支或标签。您可以使用fnmatch语法根据模式包含或排除分支或标签。有关更多信息,请参阅“使用fnmatch语法”。

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

选择分支或标签保护

在“分支保护”或“标签保护”部分,选择您要包含在规则集中的规则。当您选择规则时,您可能能够为该规则输入其他设置。有关规则的更多信息,请参阅“规则集的可用规则”。

注意:如果您选择**合并前要求状态检查**,请在“其他设置”部分

  • 您可以输入要要求的每个状态检查的名称。要完成将状态检查添加为要求,您必须点击 .
  • 如果您选择**合并前要求分支是最新的**,您必须定义一个检查才能使保护生效。

添加元数据限制

注意

  • 添加元数据限制可能会影响人们对您的仓库的贡献体验。在您实施包含元数据限制的规则集之前,您可以为您的规则集选择“评估”执行状态,以测试任何元数据限制的影响,而不会影响贡献者。有关元数据限制的更多信息,请参阅“规则集的可用规则”。
  • 元数据限制旨在提高您的仓库中提交的一致性。它们并非旨在取代安全措施,例如通过拉取请求要求代码审查。
  • 如果您将分支压缩合并,则该分支上的所有提交都必须满足基分支的任何元数据要求。
  1. 可选地,要添加规则以控制提交元数据或分支名称,在“限制”部分中,单击**限制提交元数据**或**限制分支名称**。

  2. 配置限制的设置,然后单击**添加**。您可以向同一个规则集添加多个限制。

  3. 要匹配给定的正则表达式模式,在“要求”下拉菜单中,选择**必须匹配给定的正则表达式模式**。

    对于大多数要求,例如“必须以匹配的模式开头”,您输入的模式将被逐字解释,并且不支持通配符。例如,* 字符仅代表字面上的 * 字符。

    对于更复杂的模式,您可以选择“必须匹配给定的正则表达式模式”或“必须不匹配给定的正则表达式模式”,然后使用正则表达式语法来定义匹配模式。有关更多信息,请参阅 GitHub Enterprise Cloud 文档中的“关于提交元数据的正则表达式”。

    任何查看仓库规则集的人都可以看到您提供的描述。

完成您的分支或标签规则集以及后续步骤

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

创建推送规则集

注意

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

此规则集将对该仓库的整个 fork 网络强制执行推送限制。

您可以为私有或内部仓库创建推送规则集。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 设置。如果您看不到“设置”选项卡,请选择下拉菜单,然后单击设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在左侧边栏中,在“代码和自动化”下,单击规则,然后单击规则集

    Screenshot of the sidebar of the "Settings" page for a repository. The "Rules" sub-menu is expanded, and the "Rulesets" option is outlined in orange.

  4. 单击新建规则集

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

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

  7. 可选地,要更改默认的强制执行状态,请单击 禁用 并选择一个强制执行状态。有关强制执行状态的更多信息,请参阅“关于规则集”。

授予推送规则集的绕过权限

注意

此仓库中推送规则集的绕过权限将由此仓库的整个 fork 网络继承。这意味着,对于此仓库的整个 fork 网络中的任何仓库,只有可以绕过此仓库根目录中规则集的用户才能绕过此规则集。

您可以为规则集授予某些角色、团队或应用程序绕过权限。以下人员有资格获得绕过访问权限

  • 存储库管理员或组织所有者
  • 维护或写入角色,或基于写入角色的自定义存储库角色
  • 团队
  • 部署密钥
  • GitHub 应用程序
  • Dependabot。有关 Dependabot 的更多信息,请参阅“Dependabot 快速入门指南”。
  1. 要授予规则集的绕过权限,请在“绕过列表”部分中单击 添加绕过.
  2. 在出现的“添加绕过”模态对话框中,搜索您要授予绕过权限的角色、团队或应用程序,然后从“建议”部分选择角色、团队或应用程序,并点击**添加选中项**。

选择推送保护

您可以根据文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止对该仓库及其整个 fork 网络的推送。

您配置的任何推送保护都将阻止对该仓库及其整个 fork 网络的推送。

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

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

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

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