Help us learn about your current experience with the documentation. Take the survey.

保护规则与权限

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

保护规则控制对分支的访问,并决定当多个规则同时应用于同一分支时会发生什么。 它们帮助您为仓库分支实施适当的安全措施。这些规则涵盖:

  • 权限级别、优先级和规则冲突。
  • 跨多个匹配规则的强制推送权限。
  • 代码所有者审批。
  • 群组与项目之间的保护设置。

规则行为

当一个分支匹配多个保护规则时,会应用以下行为:

  • 群组规则应用于群组中的所有项目,并且不能从项目设置中修改。 更多信息,请参阅跨群组和项目的规则
  • 当一个分支匹配多个规则时,最宽松的规则生效。然而, 代码所有者审批使用最严格的规则。
  • main 这样的确切分支名称不会覆盖像 m* 这样的通配符模式。

推送与合并权限

当分支被保护时,默认行为会强制执行以下限制:

操作 谁可以执行
保护分支 至少需要 Maintainer 角色。
推送到分支 拥有 Allowed 权限的任何人。(1)
强制推送到分支 无人。
删除分支 无人。(2)
  1. 拥有 Developer 角色的用户可以在群组中创建项目,但可能不被允许初始推送到默认分支
  2. 无人能使用 Git 命令删除受保护的分支,但拥有至少 Maintainer 角色的用户可以从 UI 或 API删除受保护的分支

强制推送权限

强制推送权限遵循相同的“最宽松规则生效”逻辑。例如,考虑包含通配符的以下规则:

分支名称模式 允许强制推送
v1.x
v1.*
v*

名为 v1.x 的分支匹配所有三个分支名称模式:v1.xv1.*v*。 由于最宽松的选项决定了行为,因此分支 v1.x 的最终权限为:

  • 允许强制推送:在三个设置中,Yes 是最宽松的,并因此控制了分支的行为。 尽管该分支也匹配了 v1.xv*(它们各自有更严格的权限),但任何可以推送到此分支的用户也可以强制推送。

代码所有者审批

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

与推送和合并权限以及强制推送权限不同,代码所有者审批使用最严格的规则。 如果一个分支受多个规则保护,那么只要任何适用的规则启用了需要代码所有者审批,就需要代码所有者审批。 更多信息,请参阅要求代码所有者审批

例如,考虑以下规则:

分支名称模式 需要代码所有者审批
v1.x
v1.*
v*

名为 v1.x 的分支匹配所有三个分支名称模式:v1.xv1.*v*。 因为至少有一个规则(v1.x)要求代码所有者审批,所以所有合并到此分支的请求都必须在合并前获得 Code Owner 的批准。

跨群组和项目的规则

分支保护规则可以在群组和项目中同时设置:

  • 群组规则应用于群组中的所有项目,并且不能从项目设置中修改。
  • 项目规则仅适用于该特定项目。

当同时存在匹配某个分支的群组和项目规则时:

  • 所有匹配的规则会被一起评估。
  • 对于大多数设置,最宽松的规则生效。
  • 对于代码所有者审批,最严格的规则生效。

您无法从项目设置中编辑或删除群组规则,但可以为同一分支添加额外的项目规则。例如:

  • 一个针对 main 的群组规则禁止强制推送。
  • 您可以添加一个允许强制推送的 main 项目规则。
  • 两条规则都存在,但对于强制推送设置,更宽松的项目规则会生效。

多分支规则示例

以下示例展示了不同规则如何影响分支保护。

允许合并

这是一个确切分支名称不会覆盖更宽松的通配符模式的示例。

分支模式 允许合并
release-v1.0 无人
release* Maintainer
* Developer + Maintainer
  • 分支 release-v1.0 匹配所有三个模式。最宽松的规则生效:
    • 允许合并:Developer + Maintainer 可以合并(来自 * 规则)。

允许推送与合并

这是一个多个分支规则如何应用于不同分支名称的示例。

分支模式 允许合并 允许推送与合并
main Maintainer 无人
m* Developer + Maintainer Developer + Maintainer
r* 无人 无人
  • 分支 main 匹配两个模式(mainm*)。最宽松的规则生效:
    • 允许合并:Developer + Maintainer 可以合并(来自 m* 规则)。
    • 允许推送与合并:Developer + Maintainer 可以推送(来自 m* 规则)。
  • 分支 release-v1.0 匹配一个模式:
    • 允许合并:无人可以合并(来自 r* 规则)。
    • 允许推送与合并:无人可以推送(来自 r* 规则)。

代码所有者要求

代码所有者审批与其他分支保护设置的工作方式不同。当多个规则匹配时,最严格的规则生效,而不是最宽松的规则。

分支模式 需要代码所有者审批
production
prod*
p*
  • 分支 production 匹配所有三个模式。最严格的规则生效:
    • 代码所有者审批:需要(来自 productionp* 规则)。
  • 分支 product-v1.0 匹配两个模式(prod*p*)。最严格的规则生效:
    • 代码所有者审批:需要(来自 p* 规则)。

确保严格保护

为确保严格保护不被更宽松的模式覆盖,请将所有匹配的模式配置为相同的严格设置。

分支模式 允许合并 允许推送与合并
production Maintainer 无人
prod* Maintainer 无人
p* Maintainer 无人
* Maintainer 无人

现在,分支 production 具有严格的推送权限,因为所有匹配的规则都指定了无人可以推送。

相关主题