composer install拉不到私有git仓库,因默认只读composer.lock中记录的来源和版本,未更新lock文件前不会解析私有源;必须先配置vcs类型repositories、确保url与认证协议一致,并执行composer update --lock更新lock文件后,install才能按私有源地址精确拉取。

Composer install 为什么拉不到私有 Git 仓库?
因为默认情况下 composer install 只读 composer.lock 中记录的包来源和版本,不重新解析 composer.json,更不会尝试认证私有 Git 地址。如果你的 lock 文件里记录的是 public 包,或没正确写入私有源信息,install 就会失败或跳过私有库。
必须先配置私有仓库为 Composer Repository
Composer 不会自动识别 Git URL 是私有的——它需要你显式声明一个 repository 条目,并指定类型为 vcs。否则即使 composer.json 里写了 "vendor/package": "dev-main",Composer 也不知道该去哪找。
- 在项目根目录的
composer.json中添加:"repositories": [ { "type": "vcs", "url": "git@github.com:your-org/private-package.git" } ] - URL 必须是可被 Git 客户端克隆的格式(
git@...或https://...),且与后续认证方式匹配 - 不能只写 HTTPS 地址却用 SSH 密钥认证——协议必须一致
认证方式选错会导致 Permission denied (publickey) 或 403
私有 Git 仓库访问失败,90% 出在这里:Composer 调用系统 Git 命令拉取,而 Git 本身没配好凭据。Composer 不接管认证,它只是触发 git clone。
- 用 SSH:确保
~/.ssh/id_rsa已存在、权限为600,且对应公钥已加到 GitHub/GitLab 的 Deploy Keys 或 SSH Keys 设置中 - 用 HTTPS + Token:在
~/.gitconfig或项目级.git/config中配置凭证 helper,或直接在 URL 中嵌入 token:https://<strong>token</strong>@github.com/your-org/private-package.git(注意:token 会留在composer.lock和 Git 历史中,不推荐) - GitLab 用户注意:
composer install期间若提示Could not fetch https://gitlab.com/api/v4/projects/xxx,说明 Composer 正在调用 GitLab API 获取包信息,此时需额外配置auth段落,而非仅靠 Git 凭据
第一次 install 前要先 run composer update --lock
很多人卡在这步:改完 repositories 和 require 后直接 composer install,结果还是拉 public 源。因为 composer.lock 还没更新,里面没存私有包的 commit hash 和 source URL。
- 执行
composer update --lock(不是composer update),它会重解析composer.json,把私有包的当前 commit 写进 lock 文件,但不修改 vendor 目录 - 再跑
composer install,就能按 lock 文件里的私有源地址和 commit 精确拉取了 - 如果 lock 文件里已有同名包(比如之前 require 过 public 版本),必须先删掉旧条目或 bump 版本号,否则 Composer 会沿用旧记录
私有 Git 包的 commit hash 和 source type(如 "source": {"type":"git","url":"git@...","reference":"a1b2c3..."})一旦写进 composer.lock,就决定了 install 行为——这点很容易被忽略,尤其当多人协作时 lock 文件没提交或冲突未解决。











