用途:safe-settings 用于以声明式方式在组织范围内管理仓库策略,避免逐个仓库点击设置页或运行一次性 gh api 脚本。当策略需跨多个仓库共享、保持同步、检测漂移并在 PR 上做 dry-run 时适用;单仓库一次性策略锁定应改用 /gh-bootstrap,PR/issue/CI 操作应改用 /gh。
主要能力:可配置仓库元数据(描述、主页、主题、可见性、默认分支、功能开关)、合并按钮设置、安全开关、经典分支保护与现代规则集、标签(支持 oldname 重命名与排除模式)、里程碑、协作者、团队、环境与部署规则、自定义属性、自动链接。同一 YAML 模式按组织→子组织→仓库分层,仓库级文件优先。
使用方式:先选定管理仓库(常见为 <org>/.github 或专用 <org>/admin)并确认范围;按标准布局搭建 .github/settings.yml、.github/suborgs/、.github/repos/;选择部署路径,默认推荐 GitHub Actions 定时任务(复制 assets/full-sync.yml 到工作流,通过 npm run full-sync 定期同步),也可用托管 Probot 应用实现实时 webhook;随后创建 GitHub App(git clone https://github.com/github/safe-settings,cp .env.example .env,设置 GH_ORG,npm install && npm run dev,走 manifest 流程安装),保存 App ID、私钥、Client ID、Client secret、Webhook secret;用 gh variable set 与 gh secret set 配置变量和密钥,再通过 gh workflow run safe-settings.yml 手动触发首次同步。
限制与注意:GitHub App 需对组织仓库有管理员权限,用户令牌不够;管理仓库路径默认在 .github/ 下,否则需设置 CONFIG_PATH;GHA full-sync 每次遍历全组织仓库,超大组织(>1000 仓库)可能耗时一小时并消耗 Actions 分钟,建议用托管 Probot 或按子组织限定范围;组织级 settings.yml 变更会在下次同步应用到所有仓库,除规则集的 enforcement: evaluate 外没有先暂存到少数仓库的开关;repos/<name>.yml 中 force_create: true 可创建不存在的仓库,需谨慎;safe-settings 默认不会取消所有 API 字段,移除标签需列入 labels.exclude,移除协作者通常需删除条目后同步;合并队列是规则集条目内的 merge_queue 规则,不是顶层开关。该技能消费已发布应用,不用于开发上游规则,也不用于从旧 github/settings 迁移。