gitee私有仓库不能提交到packagist,必须在项目级composer.json中用vcs类型显式声明url(须以.git结尾),并配置含projects权限的personal access token于auth.json;公开镜像库可直接https配置无需认证。

直接说结论:Gitee 私有仓库不能提交到 Packagist,必须用 vcs 类型在项目级 composer.json 中显式声明,并配合 auth.json 提供带 projects 权限的 Personal Access Token;Gitee 公开镜像仓库(如 https://gitee.com/mirrors/laravel-framework.git)可直接用 HTTPS URL 配置,无需认证。
为什么 Gitee 私有仓库配了 vcs 还是报 Could not find package
根本原因不是 Composer 找不到包,而是它压根没去你的 Gitee 地址查——因为默认隐式启用了 packagist.org 源,而你的私有包名(比如 myorg/utils)在 Packagist 上不存在,Composer 就直接放弃后续查找了。
- 必须在
repositories数组里**显式加回 packagist 源并设"packagist": false**,否则 Composer 会跳过你配的私有源 - 私有源 URL 必须以
.git结尾(如https://gitee.com/myorg/utils.git),少这个后缀会静默失败 -
require里的包名必须和私有库composer.json中的"name"字段**逐字符一致**,包括大小写和 vendor 名 - 别把
repositories写进config或extra字段里——它必须是composer.json的顶层键
auth.json 怎么写才让 Gitee 私有库通过认证
Gitee 不认 github-oauth 或 gitlab-oauth 这类字段,只认标准的 http-basic,且域名必须精确匹配(gitee.com,不能是 www.gitee.com 或带端口)。
- Token 必须在 Gitee 后台生成,权限勾选
projects(不是user_info或notifications) -
auth.json路径只能是~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows),权限设为600 - 内容格式严格如下:
{ "http-basic": { "gitee.com": { "username": "your-gitee-username", "password": "your-personal-access-token" } } } - 用户名填 Gitee 账号名(不是邮箱),密码字段填 Token——不要加
glpat-前缀,Gitee Token 本身不含该前缀
CI/CD 环境下 composer install 总卡在 Cloning,怎么破
看到 Cloning into 'xxx' 卡住,100% 是 Git 层问题,跟 Composer 镜像源完全无关。Gitee 私有库在 CI 中尤其容易因网络策略或认证方式失效。
- 优先改用 SSH 协议:
"url": "git@gitee.com:myorg/utils.git",并在 CI 环境预装 SSH 密钥 +ssh-agent加载 - 若必须用 HTTPS,确保 CI 环境变量中注入
GIT_TOKEN,并在auth.json中引用(部分 CI 支持模板替换) - 手动测试命令:
git clone https://your-token:x-oauth-basic@gitee.com/myorg/utils.git—— 如果这步失败,Composer 一定失败 - 禁用 Gitee 的「强制 HTTPS」或「双因素认证」策略(CI 机器无法交互验证)
最容易被忽略的一点:Gitee 私有仓库的 composer.json 必须放在默认分支(main 或 master)的根目录,且 "name" 不能含下划线或大写字母——myorg/utils 可以,MyOrg_Utils 或 myorg_utils 都会导致解析失败。











