配GitHub Personal Access Token可将Composer的GitHub API请求限额从每小时60次提升至5000次,需生成带public_repo权限的token并执行composer config --global github-oauth.github.com ,同时确保~/.composer/auth.json权限为600。

直接配 GitHub Personal Access Token 就行,不配就永远卡在每小时 60 次的匿名限额里。
为什么 composer install 突然卡在 “Resolving packages” 并报 403
Composer 在解析 dev-master、dev- 开头的分支、私有仓库 tag 列表,或依赖里含 fork 后没改 "source" 的包时,会密集调用 https://api.github.com/。这些请求默认不带认证头,GitHub 就当你是“匿名游客”,按请求头限流:每小时最多 60 次 —— 跟 IP 无关,换机器、清缓存、重装 Composer 都没用。
- 哪怕你只装一个包,只要它依赖 5 个 GitHub 上的
dev分支,就可能直接耗尽额度 - 公司/学校共享出口 IP?那 60 次是大家共用的,更容易撞墙
- 错误常出现在 CI 环境反复重试、
composer create-project或composer update拉取大量开发版依赖时
怎么用 composer config --global github-oauth.github.com 配 token
配一个 GitHub Personal Access Token,就能把限额从 60 升到 5000 次/小时。关键是两步都得做对,缺一不可:
- 去
https://github.com/settings/tokens/new新建 token,勾选public_repo(公开项目够用,不用给admin:org或delete_repo) - 执行
composer config --global github-oauth.github.com <token></token>,token 会写进~/.composer/auth.json - 立刻检查权限:
chmod 600 ~/.composer/auth.json—— 权限不是 600,Composer 会静默忽略该文件,退回到未认证状态
验证是否生效:composer diagnose 输出里看到 GitHub API: OK 才算真正通了。
OpenClaw 技能 — 给定一个 GitHub 仓库 URL,自动解析出 owner/repo 名称,发现其中的 YAML/properties 配置文件及其配对的中文字段说明;在 `workspace/{repo}/` 目录下按同步日期(格式为 `YYYY-MM-DD`)创建时间戳子目录;写入 `.openclaw-config-state.json` 状态文件。每次用户提问前,先比对远程仓库当前 ref(如 `main` 或 `master`)的最新提交 SHA 与本地状态文件中记录的 SHA:
composer config --global 配了却还报限速?常见失效场景
Token 配了 ≠ 生效。以下情况会让 Composer 继续走未认证通道:
- 运行
composer install的用户和执行composer config --global的不是同一个(比如用sudo安装,但 config 是普通用户配的) - 项目根目录下存在
auth.json,它会覆盖全局配置;用composer config --list查看实际生效位置 - token 已被 GitHub 删除或过期(classic token 默认永不过期,但 fine-grained token 有明确有效期)
- PHP 禁用了
curl或 SSL 验证失败(尤其某些旧版 CentOS),导致Authorization头根本发不出去
别混淆 Packagist Token 和 GitHub Token
如果报错是 429 Too Many Requests 且日志里出现 packagist.org,那不是 GitHub 问题,而是 Packagist 自身限流 —— 这时候要配的是 Packagist 的 API Token,不是 GitHub 的。
- Packagist Token 必须登录
https://packagist.org/profile/→ “API Token” → “Create New Token” 生成 - 配置命令是:
composer config --global github-oauth.packagist <your_packagist_token></your_packagist_token>,注意 key 是github-oauth.packagist,不是github-oauth.github.com - 不要把两个 token 混着用,也不要硬编码进
composer.json或提交到 Git
最常被忽略的点:权限 600 不是建议,是强制要求;auth.json 权限不对,Composer 就当它不存在。

















