当前位置:首页 > 文章列表 > 文章 > 软件教程 > GitHub Rulesets 怎么只限制发布分支

GitHub Rulesets 怎么只限制发布分支

来源:17golang原创 2026-10-05 21:36:35 0浏览 收藏

GitHub Rulesets 只限制发布分支,关键不是先勾保护项,而是先把 Target branches 的目标范围收窄:单层发布分支用 release/*,可能包含多级目录的发布分支用 release/**/*。不要选择 All branches,也不要把 Default branch 当作发布分支范围。这样规则集会保护 release/1.8 一类分支,同时不影响 main、develop 和 feature/login。

官方文档:https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository

最终结果
  • 规则集名称:release-branch-policy。
  • 目标模式:单层用 release/*,多层用 release/**/*。
  • 推荐规则:必须走 Pull Request、必须通过状态检查、禁止强制推送、限制删除。
  • 生效状态:配置完成并核对范围后,将 Enforcement status 设为 Active。

先确定发布分支到底有几层

GitHub 的分支规则模式使用 fnmatch 语法。由于路径匹配按目录分隔符处理,* 不会跨过斜杠。因此,release/* 适合 release/1.8、release/2026-10 这样的单层命名,但不会覆盖 release/hotfix/1.8.1。如果团队允许发布分支继续分层,就应改用 release/**/*。

分支样例release/*release/**/*
release/1.8命中命中
release/hotfix/1.8.1不命中命中
main不命中不命中
develop不命中不命中
feature/login不命中不命中

若仓库目前只有单层发布分支,优先使用范围更小的 release/*。只有命名规范确实允许多层目录时,再扩大到 release/**/*,避免未来出现意外命中。

步骤一:新建分支规则集,先保持 Disabled

  1. 进入目标仓库,依次打开 Settings > Rules > Rulesets。
  2. 点击 New ruleset > New branch ruleset。
  3. 在 Ruleset Name 填写 release-branch-policy。
  4. 配置阶段先把 Enforcement status 保持为 Disabled,完成范围核对后再激活。
原创仓库设置界面中创建发布分支规则集的操作说明图
图1:从 Settings 的 Rulesets 入口新建 Branch ruleset,并填写规则集名称。

这一步的成功状态是:页面顶部显示 release-branch-policy,类型为分支规则集,Enforcement status 仍是 Disabled。Disabled 适合先配置、先核对,不会立即把未完成的规则施加到开发流程。

步骤二:只添加发布分支模式

  1. 找到 Target branches 区域,点击 Add a target。
  2. 选择 Include by pattern,不要选 All branches。
  3. 单层发布分支输入 release/*;需要覆盖多级目录时输入 release/**/*。
  4. 点击 Add inclusion pattern 保存目标模式。
原创规则集 Target branches 中填写 release 分支模式的操作说明图
图2:使用 Include by pattern 把规则集目标收窄到 release 发布分支。

保存后,Target branches 区域应只显示刚添加的包含模式。若同时存在 Default branch、All branches 或过宽的包含模式,先删除多余目标;否则即使保护规则本身正确,也会把范围扩到非发布分支。

步骤三:选择保护项并切换为 Active

在 Rules 区域按团队发布流程启用规则。对多数发布分支,下面四项已经能形成清晰的最小保护集合:

  • Require a pull request before merging:发布改动必须经过 Pull Request,而不是直接推送。
  • Require status checks to pass before merging:至少添加一个实际存在的 CI 检查;若还要求分支保持最新,也要先选定具体检查。
  • Block force pushes:阻止重写发布分支历史。
  • Restrict deletions:避免发布分支被随意删除。

不要把 Restrict updates 当作“必须走 PR”的同义项。它会把更新权限收紧到旁路名单中的角色、团队或应用,配置不当时,正常 Pull Request 合并也可能被拦截。只有明确要求“仅发布管理员或部署应用可更新”时才启用,并提前配置对应 Bypass list。

旁路名单应遵循最小权限:只加入发布负责人、发布团队或部署应用。如果希望这些角色仍然留下 Pull Request 记录,可以把旁路方式限制为 For pull requests only。不要为了省事给全部管理员添加宽泛旁路,否则规则表面 Active,关键人员却可以完全绕过。

确认 Target branches、规则和 Bypass list 后,把 Enforcement status 改为 Active,再点击页面底部的 Create。Active 规则集创建后会立即对命中的分支生效。

原创规则集详情中发布分支规则已激活的结果说明图
图3:最终详情页应同时显示 Active、release 分支模式和已启用的保护项。

结果核对:先看命中范围,再看操作限制

回到 Settings > Rules > Rulesets,打开 release-branch-policy。先确认状态为 Active,目标模式没有混入 All branches,再按下表验证。这里的“验证”是检查规则设计是否符合仓库命名,不需要为了测试而修改生产发布分支。

核对项期望结果不符合时优先检查
release/1.8被规则集命中Include by pattern 是否保存
release/hotfix/1.8.1仅在使用 release/**/* 时命中是否误把 * 当成跨斜杠通配符
main、develop不被本规则集命中是否同时选了 Default branch 或 All branches
直接推送发布分支按启用规则被阻止旁路名单是否过宽
Pull Request 合并状态检查通过后才可合并是否实际添加了 CI 检查

常见异常与修正

多级发布分支没有被保护

原因通常是使用了 release/*。它只覆盖一个斜杠后的单层名称。把目标模式改为 release/**/*,再重新核对单层和多层分支。

main 或 feature 分支也被限制了

先检查本规则集是否误选 All branches、Default branch 或其他过宽模式。如果这里没有问题,再查看仓库中的其他 Rulesets 和 Branch protection rules。GitHub 会聚合同一分支上的多套规则,重叠时以更严格的结果为准,因此影响来源不一定是当前规则集。

勾选状态检查后仍能直接合并

仅打开 Require status checks 还不够,需要在该规则下添加实际的 CI 检查。若没有可选项,先让对应工作流在仓库中成功运行一次,再回到规则集选择检查名称。

发布负责人明明在旁路名单里,仍被要求走 PR

检查旁路模式是否设为 For pull requests only。这个模式允许角色绕过部分限制,但仍要求从 Pull Request 路径进入,适合保留审批和审计记录。如果确实需要完全旁路,应由团队明确批准后再调整。

看不到 Rulesets 或无法激活

先确认当前账号拥有仓库规则管理权限,再核对仓库可见性与所在组织的 GitHub 套餐。Rulesets 的可用范围与仓库类型、个人或组织套餐有关,权限不足时不要改用更宽松的临时分支保护绕过流程。

归档这次规则变更

规则集创建后,建议在仓库运维记录中保存六项信息:规则集名称、目标模式、Enforcement status、启用规则、状态检查名称、旁路角色或应用,以及本次变更原因。以后发布分支命名从单层调整为多层时,就能准确判断是修改 release/*,还是新增一个独立规则集,而不会靠猜测扩大保护范围。

最终判断标准很简单:详情页显示 release-branch-policy 为 Active,目标只含 release/* 或 release/**/*,发布分支受到预期保护,而 main、develop 和普通功能分支不受这套规则集影响。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go sync.Cond 为什么 Wait 必须放在循环里Go sync.Cond 为什么 Wait 必须放在循环里
上一篇
Go sync.Cond 为什么 Wait 必须放在循环里
90fps画质渲染管线和VSync自适应怎么看?页面调试信息与实际效果边界
下一篇
90fps画质渲染管线和VSync自适应怎么看?页面调试信息与实际效果边界
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    343次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    403次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    403次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    362次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    184次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码