跳至主要内容

为仓库创建规则集

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

谁可以使用此功能?

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

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

在内部和私有仓库以及已启用推送规则集的仓库的分叉中,GitHub Team 方案提供推送规则集功能。

简介

您可以创建规则集,以控制用户在仓库中如何与选定的分支和标签交互。您可以控制例如谁可以向特定分支推送提交以及提交必须如何格式化,或谁可以删除或重命名标签。您还可以阻止他人重命名仓库。

您还可以创建推送规则集,以阻止向私有或内部仓库及该仓库的整个派生网络进行推送。推送规则集允许您基于文件扩展名、文件路径长度、文件和文件夹路径以及文件大小来阻止推送。

创建规则集时,您可以允许特定用户绕过该规则集中的规则。

有关规则集的更多信息,请参见 关于规则集

对于使用 GitHub Team 和 GitHub Enterprise 计划的客户,您也可以为组织中的仓库创建规则集。更多信息,请参见 在组织中为仓库创建规则集

导入预构建规则集

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

您可以使用 JSON 文件导入已有的规则集。如果您想将相同的规则集应用于多个仓库或组织,这会很有用。更多信息,请参阅 在组织中管理仓库规则集

使用 fnmatch 语法

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

您可以使用 * 通配符匹配任意字符序列。由于 GitHub 在 File::FNM_PATHNAME 标志下使用 File.fnmatch 语法,* 通配符不会匹配目录分隔符(/)。例如,qa/* 将匹配所有以 qa/ 开头且仅包含一个斜杠的分支,但不会匹配 qa/foo/bar。您可以使用 qa/**/*qa 后包含任意数量的斜杠,这将匹配例如 qa/foo/bar/foobar/hello-world。您还可以使用 qa**/**/* 来扩展 qa 字符串,使规则更加宽松。

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

不支持的 fnmatch 语法

并非所有 fnmatch 表达式都受分支保护规则支持。请注意以下限制

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

使用规则集强制状态

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

您可以为规则集选择以下任意一种强制状态。

  • 激活: 您的规则集将在创建时生效。
  • 禁用: 您的规则集将不会生效。

创建分支或标签规则集

  1. 在 GitHub 上,导航至仓库的主页面。

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

    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. 如果想更改默认执行状态,点击 已禁用并选择一个执行状态。

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

您可以为特定角色、团队或应用授予规则集的绕过权限。以下对象有资格获得绕过访问权

  • 仓库管理员、组织所有者和企业所有者
  • 维护者或写入角色,或基于写入角色的自定义仓库角色
  • 团队(不包括私密团队),请参阅 关于组织团队
  • GitHub Apps
  • Dependabot。有关 Dependabot 的更多信息,请参阅 Dependabot 入门指南
  1. 要为规则集授予绕过权限,请在 “绕过列表” 部分点击 添加绕过

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

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

    已选择的参与者现在必须通过打开拉取请求来对仓库进行更改,这将在拉取请求和审计日志中留下明确的变更记录。随后,该参与者可以选择绕过任何分支保护并合并该拉取请求。

选择要针对的分支或标签

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

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

选择分支或标签保护

在 “分支保护” 或 “标签保护” 部分,选择您想在规则集中包含的规则。选择规则后,您可能可以为该规则输入额外的设置。有关这些规则的更多信息,请参阅 规则集可用规则

注意

如果您选择 合并前要求状态检查,则在 “附加设置” 部分

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

添加元数据限制

您的元数据限制旨在提升仓库中提交的一致性。它们并非用于取代诸如通过拉取请求进行代码审查等安全措施。

注意

如果您对分支进行压缩合并,则该分支的所有提交都必须满足基础分支的任何元数据要求。

在正则表达式中使用行尾锚点时,请使用 \n?$ 而不是单独的 $。可选的 \n? 能匹配 Git 推送/CLI 流程中可能出现的末尾换行,同时仍适用于通过网页 UI 和 API 创建的提交。

  1. 要添加控制提交元数据或分支名称的规则,请在创建或编辑规则集时的 “限制” 部分点击 限制提交元数据限制分支名称

  2. 配置该限制的设置,然后点击 添加。您可以在同一规则集内添加多个限制。

  3. 若要匹配给定的正则表达式模式,请在 “要求” 下拉列表中选择 必须匹配给定的正则表达式模式

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

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

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

  4. 可选地,在对规则集施加元数据限制之前,选择规则集的 “评估” 强制执行状态,以在不影响贡献者的情况下测试元数据限制的效果。有关元数据限制的更多信息,请参阅 规则集可用规则

完成分支或标签规则集并进行后续步骤

要完成规则集的创建,请点击 创建。如果规则集的强制执行状态被设为 “已激活”,则规则集会立即生效。

创建推送规则集

注意

此规则集将在仓库的整个派生网络中执行推送限制。

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

  1. 在 GitHub 上,导航至仓库的主页面。

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

    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. 如果想更改默认执行状态,点击 已禁用并选择一个执行状态。

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

注意

此仓库的推送规则集的绕过权限将由该仓库整个派生网络继承。这意味着,能够在根仓库中绕过此规则集的用户,也将能够在该仓库整个派生网络中的任何仓库中绕过此规则集。

您可以为特定角色、团队或应用授予规则集的绕过权限。以下对象有资格获得绕过访问权

  • 仓库管理员、组织所有者和企业所有者
  • 维护者或写入角色,或基于写入角色的自定义仓库角色
  • 团队(不包括私密团队),请参阅 关于组织团队
  • GitHub Apps
  • Dependabot。有关 Dependabot 的更多信息,请参阅 Dependabot 入门指南
  1. 要为规则集授予绕过权限,请在 “绕过列表” 部分点击 添加绕过
  2. 在出现的 “添加绕过” 模态对话框中,搜索您想授予绕过权限的角色、团队或应用,然后从 “建议” 部分选择相应的角色、团队或应用,并点击 添加选中项

选择推送保护

您可以基于文件扩展名、文件路径长度、文件和文件夹路径以及文件大小,阻止对本仓库及其整个派生网络的推送。

您配置的任何推送保护都会阻止本仓库以及该仓库整个派生网络中的推送。

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

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

完成推送规则集并进行后续步骤

要完成规则集的创建,请点击 创建。如果规则集的强制执行状态被设为 “已激活”,则规则集会立即生效。

© . This site is unofficial and not affiliated with GitHub, Inc.