gitee私有库必须配置为"type":"vcs"、url含".git"后缀且使用oauth2+个人令牌鉴权,否则composer install会因认证失败或格式错误报could not fetch;裸地址https://gitee.com/org/repo无效,因composer不识别网页链接,仅支持可git clone的带鉴权url。

直接说结论:Gitee 私有库必须用 oauth2 + 个人令牌(Personal Access Token),且 URL 必须带 .git 后缀、声明为 vcs 类型,否则 composer install 会卡在认证环节或报 Could not fetch。
为什么填 https://gitee.com/org/repo 就失败?
Gitee 不接受裸网页地址作为仓库源。Composer 默认走匿名 HTTPS,而私有库需要鉴权;它不会自动把你的浏览器登录态透传过去。
- 错误写法:
"url": "https://gitee.com/your-org/private-pkg"(缺.git,非可克隆格式) - 正确写法:
"url": "https://oauth2:YOUR_TOKEN@gitee.com/your-org/private-pkg.git" - 必须加
type: "vcs",否则 Composer 不识别这是 Git 源 - 令牌权限必须勾选
projects(不是user_info或notifications)
auth.json 里该用 http-basic 还是 bearer?
两者都行,但行为不同:
使用约定式提交信息暂存、提交和推送git更改。当用户想要提交和推送更改、提到推送到远程、或要求保存并推送工作时触发。也适用于用户说“推送更改”、“提交并推送”、“推送这个”、“推送到github”或类似git工作流程请求时。
-
http-basic是最稳的:Gitee 接受username为 token、password留空的模拟 Basic Auth 方式
示例:{ "http-basic": { "gitee.com": { "username": "glpat-xxxxxxxxxxxxxxxxxxxx", "password": "" } } } -
bearer更语义化,但部分旧版 Composer({ "bearer": { "gitee.com": "glpat-xxxxxxxxxxxxxxxxxxxx" } } - 推荐优先用
http-basic,兼容性好,CI 场景下也容易通过COMPOSER_AUTH注入
require 时提示 could not find package 怎么办?
这不是网络或权限问题,而是包注册逻辑没对上:
- 检查私有库根目录下的
composer.json中name字段是否和你require的完全一致(包括大小写、斜杠方向) - Gitee 上必须打语义化 tag(如
v1.0.0),dev-main或dev-master默认不可见——除非你在根项目config里显式启用:"config": { "minimum-stability": "dev", "prefer-stable": true } - 确认 tag 已推送到远程:
git push origin v1.0.0,别只本地打 tag - 运行
composer clear-cache,避免旧元数据干扰
最容易被忽略的一点:Gitee 的 OAuth 令牌一旦生成就无法再次查看,复制后立刻保存;如果配置后仍 401,八成是令牌权限没勾 projects,或者 URL 域名拼错(比如用了 www.gitee.com 但配置的是 gitee.com)。










