GitHub Rulesets 怎么只限制发布分支
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
- 进入目标仓库,依次打开 Settings > Rules > Rulesets。
- 点击 New ruleset > New branch ruleset。
- 在 Ruleset Name 填写
release-branch-policy。 - 配置阶段先把 Enforcement status 保持为 Disabled,完成范围核对后再激活。

这一步的成功状态是:页面顶部显示 release-branch-policy,类型为分支规则集,Enforcement status 仍是 Disabled。Disabled 适合先配置、先核对,不会立即把未完成的规则施加到开发流程。
步骤二:只添加发布分支模式
- 找到 Target branches 区域,点击 Add a target。
- 选择 Include by pattern,不要选 All branches。
- 单层发布分支输入
release/*;需要覆盖多级目录时输入release/**/*。 - 点击 Add inclusion pattern 保存目标模式。

保存后,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 规则集创建后会立即对命中的分支生效。

结果核对:先看命中范围,再看操作限制
回到 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 和普通功能分支不受这套规则集影响。
Go sync.Cond 为什么 Wait 必须放在循环里
- 上一篇
- Go sync.Cond 为什么 Wait 必须放在循环里
- 下一篇
- 90fps画质渲染管线和VSync自适应怎么看?页面调试信息与实际效果边界
-
- 文章 · 软件教程 | 5小时前 | 开发环境 · vs code · VS Code Docker Compose Dockerfile devcontainer.json Dev Containers
- VS Code Dev Containers 修改配置后怎么完整重建容器
- 368浏览 收藏
-
- 文章 · 软件教程 | 9小时前 | vs code · 软件教程 · VS Code 设置同步 Profiles Settings Sync 扩展同步
- VS Code Profiles 怎么只同步指定扩展和设置
- 345浏览 收藏
-
- 文章 · 软件教程 | 15小时前 |
- VS Code 提示仓库不安全时怎么处理 safe.directory
- 199浏览 收藏
-
- 文章 · 软件教程 | 18小时前 | docker · Context ·
- Docker Context 怎么切换远程守护进程
- 372浏览 收藏
-
- 文章 · 软件教程 | 20小时前 | 命令行 · 效率工具 · github · 开发工具 · 软件教程 · 位置参数 命令别名 GitHub CLI gh alias set shell alias
- GitHub CLI 怎么创建带参数的命令别名
- 404浏览 收藏
-
- 文章 · 软件教程 | 22小时前 | obsidian · 软件教程 · YAML Properties Obsidian 笔记元数据 属性类型 Properties视图
- Obsidian Properties 怎么统一管理笔记元数据
- 378浏览 收藏
-
- 文章 · 软件教程 | 1天前 | postman · 软件教程 · 接口测试 · 环境变量 初始值 Postman 当前值 Local value Shared value
- Postman 环境变量怎么区分初始值与当前值
- 360浏览 收藏
-
- 文章 · 软件教程 | 1天前 | CI/CD · gitHub actions · 软件教程 · GitHub GitHub Actions 构件保留时间
- GitHub Actions 怎么设置构件保留时间
- 395浏览 收藏
-
- 文章 · 软件教程 | 1天前 | git · 软件教程 · Git Git worktree worktree prune
- Git worktree 怎么清理失效工作区记录
- 287浏览 收藏
-
- 文章 · 软件教程 | 1天前 | docker ·
- Docker Build 缓存挂载怎么复用包管理器下载
- 264浏览 收藏
-
- 文章 · 软件教程 | 1天前 | GitHub Copilot Pull Request Code Review API
- GitHub Copilot Code Review API 怎么提交代码审查请求
- 409浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 343次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 403次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 403次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 362次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 184次使用
-
- 聊聊Go语言编译github上的项目遇到的坑
- 2022-12-31 455浏览
-
- node.js学习笔记之koa框架和简单爬虫练习
- 2023-01-10 124浏览
-
- 在连接云服务器的TDengine时,一定要注意这个细微的操作
- 2023-02-25 311浏览
-
- 爬虫系列:使用 MySQL 存储数据
- 2023-01-13 462浏览
-
- 这款简洁的开源客户关系管理系统,真是好东西
- 2023-01-24 485浏览

