GitHub Personal Access Token 配置 Composer 认证私有仓库需勾选 repo、read:packages 等 scope,通过 composer config -g github-oauth.github.com 设置,并在 composer.json 的 repositories 中声明 type 为 vcs、URL 带 .git 后缀。

GitHub Personal Access Token 怎么配才有效
Composer 认证私有仓库,靠的是 GitHub 的 personal access token,不是账号密码,也不是 SSH key。用错方式会直接报 401 Unauthorized 或 404 Not Found(后者常因权限不足被误判为仓库不存在)。
必须勾选这些 scope:repo(读写私有库)、read:packages、delete:packages(可选)、write:packages(发布时需要)。只勾 public_repo 不行,它对私有库完全无效。
生成后立刻复制保存——页面关闭后无法再次查看明文 token。
- Token 存在本地配置里:运行
composer config -g github-oauth.github.com <your_token> - 别写进
composer.json,更别提交到 Git;敏感信息走auth.json(默认位于COMPOSER_HOME目录下) - 如果项目用 CI/CD,token 要设为环境变量,再通过
composer config github-oauth.github.com ${GITHUB_TOKEN}注入
composer.json 里怎么写私有仓库地址
不能直接写 https://github.com/owner/repo 就完事。Composer 默认按 Packagist 协议解析,私有源得显式声明类型和 URL。
关键点:type 必须是 vcs,URL 必须带 .git 后缀,否则 Composer 会跳过该仓库或报 Could not fetch。
- 在
composer.json的repositories字段加一条:
{
"type": "vcs",
"url": "https://github.com/your-org/internal-lib.git"
}
name)必须和 GitHub 上的 owner/name 完全一致,比如 "your-org/internal-lib",大小写都不能错composer.json(比如纯工具脚本),得手动加 "type": "library" 并确保有 autoload 配置,否则 require 后不会自动加载为什么 composer install 报 Could not authenticate against github.com
这不是网络问题,是认证链断了。常见于三类情况:token 过期、token 权限不够、或者 Composer 用了系统级缓存里的旧凭据。
先确认当前生效的 token:composer config -g github-oauth.github.com。为空?说明没配;显示旧值?可能已失效。
- 删掉旧配置:
composer config -g --unset github-oauth.github.com,再重设 - 清空 Composer 的认证缓存:
rm -f $(composer config -g home)/auth.json(Linux/macOS)或手动删 Windows 下的对应文件 - 如果公司用 GitHub Enterprise,URL 必须写成
https://ghe.example.com,且 token 配置目标也得是那个域名,不是github.com - 某些 PHP 环境(如 Docker Alpine)缺 ca-certificates,导致 HTTPS 认证失败,需额外安装
用 SSH 方式替代 HTTPS 可以吗
可以,但限制多:必须本地有可用的 SSH key,且 GitHub 账号已绑定该公钥;Composer 必须能调用 ssh-agent;CI 环境通常不支持交互式 SSH 登录。
写法上,URL 改成 git@github.com:owner/repo.git,type 仍为 vcs。但注意:Composer 会尝试用 ssh -T git@github.com 测试连通性,失败则静默跳过该源。
- 本地开发可用,但别在团队共享的
composer.json里硬编码 SSH 地址,因为别人不一定配了相同 key - 如果要用,建议配合
platform-check或文档说明依赖 SSH 环境 - 比起 HTTPS + token,SSH 更难调试——错误信息往往只有
Cloning failed,没具体原因
.git、或者 auth.json 被多个 Composer 版本交叉污染。配一次之后,记得在新机器上重走一遍验证流程,别信“上次能用这次肯定也行”。










