Composer镜像服务不代理Git克隆,仅缓存composer.json元数据;私有Bitbucket仓库仍需本地配置SSH密钥或App Password,确保composer install能直连克隆代码。

Composer 镜像服务(如 Private Packagist、Satis、Toran Proxy)本身不支持“镜像 Bitbucket 私有库”的完整流程——它们只缓存元数据(composer.json),不托管或代理 Git 仓库代码。私有 Bitbucket 仓库的源码拉取仍由 Composer 直连 Bitbucket 完成,镜像只是帮你加速包发现和依赖解析,不是代理克隆。
为什么不能把 Bitbucket 私有库“镜像”到 Packagist 类服务
镜像服务只同步 composer.json 文件内容(name、version、require、dist/source 等),但不会 clone 或托管你的 Git 仓库。当你运行 composer install 时,Composer 仍会直接执行 git clone 到 git@bitbucket.org:org/repo.git 或 https://bitbucket.org/org/repo.git —— 这一步完全绕过镜像服务。
- 镜像不持有 Git 仓库副本,也不转发
git协议请求 -
dist包(zip/tar)若未手动上传,镜像无法提供下载链接 - 所有认证(SSH 密钥、App Password)仍需本地配置,镜像不参与也不透传
正确做法:镜像 + 本地认证双轨并行
你得同时做两件事:让镜像服务知道这个包存在,且让本地 Composer 能实际拉下代码。
- 在镜像后台手动添加该私有包的 Git URL(如
https://bitbucket.org/your-org/your-pkg.git),触发元数据抓取;它会读取远程composer.json的name和分支/标签 - 确保本地已配好认证:要么用
composer config bitbucket-oauth.bitbucket.org <app-password></app-password>(HTTPS 场景),要么确保ssh -T git@bitbucket.org成功(SSH 场景) -
composer.json中仍需保留"type": "vcs"声明(哪怕用了镜像),否则 Composer 不会识别为可克隆仓库 - 如果镜像启用了“private package sync”,注意它通常只同步 public 分支;私有分支需显式配置白名单或启用 auth token 抓取
常见失败点:看似配了镜像,却 still Could not fetch
报错往往不是镜像没生效,而是本地认证缺失或协议冲突。
- 镜像返回了包信息,但
composer install卡在Cloning into '/tmp/...'—— 说明镜像成功,但git clone失败,检查git ls-remote https://bitbucket.org/your-org/your-pkg.git是否能通 - URL 写成
https://bitbucket.org/your-org/your-pkg(缺.git)→ 镜像可能抓到元数据,但 Composer 克隆时 404 - 镜像配置了 HTTPS URL,但本地只配了 SSH 密钥 → Composer 尝试用 HTTPS 协议克隆,而没配
bitbucket-oauth,直接 403 - CI 环境中
composer config --global写入的认证,在容器里未挂载~/.composer/auth.json→ 认证丢失
最易被忽略的是:镜像服务从不替代 git 层认证。无论是否用镜像,只要包是 VCS 类型,Composer 就必须能用自己的凭据完成一次真实 git clone。这步失败,前面所有镜像配置都白搭。


















