Composer 安装私有 Git 包需在 composer.json 中配置 type 为 "vcs" 且含正确 URL(如 git@gitlab.example.com:group/project.git),私有包 composer.json 必须有合法 name 和 version(如 "dev-main"),HTTPS 需配 auth.json,SSH 需本地密钥可用,require 时建议用 dev-main#commit 或 dev-main as 1.0.0 并配合 composer update --with-dependencies。
Composer 从私有 Git 仓库安装包,必须配置
Composer 默认只认 Packagist,私有仓库不加配置直接
肯定报错:
。核心动作是手动在
里声明仓库来源。
常见错误是只写
却漏掉
,或者 URL 写成网页地址(如
)而非 Git 克隆地址(
或
)。
必须是
,不是
或
必须指向可被
的地址,支持
、
、
如果仓库用 SSH,本地需已配置好对应密钥,且能手动
成功——Composer 不会提示密钥问题,只会卡住或报超时
私有包的
必须有合法
和
字段
即使你只是想装一个内部工具库,它的
也得满足最低要求:有
(格式为
,不能含下划线或大写字母),以及至少一个可用的
(如
、
或带
前缀的分支名)。否则 Composer 找不到匹配版本。
典型翻车点:开发中临时改了
但没同步更新依赖方的
;或只写了
,却在
里写
——根本对不上。
分支名作为版本时,必须用
前缀,例如分支
对应版本号
标签打完后,Composer 默认能识别
、
,但不识别
如果不想打标签,又想稳定引用某次提交,可用
语法(需 Composer 2.2+)
认证问题:HTTPS 私仓要配
,SSH 私仓要通
HTTPS 方式拉取私有仓库时,Composer 会读取项目根目录或全局
中的凭据。不配就会 401;配错格式(比如多了一层
包裹)也会静默失败。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
SSH 方式看似省事,但实际更易出问题:Composer 底层调的是系统
命令,所以它完全依赖你本机的 SSH 配置。哪怕
能通,Composer 仍可能因未指定
别名、或未启用
而失败。
格式必须是:
GitLab/GitHub 的 personal access token 可当
用,但 GitHub 已弃用密码登录,必须用 token
SSH 地址推荐显式写成
,避免 Composer 自动转成 HTTPS
时指定分支或提交,别信自动解析
很多人以为写
就能装 main 分支,结果还是装了 Packagist 上的老版本。这是因为 Composer 优先走缓存和已知元数据,不一定实时查你的 VCS 仓库。
真正可靠的做法是加
并强制刷新:先删
(或至少删掉该包记录),再运行
。如果还卡住,就加
看它到底连了哪个 URL。
临时装某个提交:
想锁定某次提交又怕分支变动,用
在
里做版本别名
CI 环境记得设
环境变量传入
内容,而不是靠文件挂载
私有 VCS 包最麻烦的从来不是配置本身,而是错误信息太模糊——
可能是网络、权限、URL 拼错、SSH 配置失效、甚至 Git 服务器返回了非标准 HTTP 状态码。动手前,先确保你能用相同协议、相同凭据、在相同环境里手动
成功。
repositoriescomposer require vendor/nameCould not find package vendor/name at any versioncomposer.json"type": "vcs""url"https://gitlab.example.com/group/projectgit@gitlab.example.com:group/project.githttps://gitlab.example.com/group/project.git"type""vcs""package""path""url"git clonegit@https://ssh://git clonecomposer.jsonnameversioncomposer.json"name"vendor/name"version""dev-main""1.0.0"dev-namerequire"version": "dev-foo"require"vendor/name": "^1.0"dev-release/2.1"dev-release/2.1"v1.2.31.2.3my-v1.2.3"dev-main#abcd123"auth.jsongit~/.composer/auth.jsonhttp-basicgitssh -T git@gitlab.example.comHostForwardAgentauth.json{"http-basic": {"gitlab.example.com": {"username": "xxx", "password": "yyy"}}passwordgit@gitlab.example.com:group/project.gitcomposer requirecomposer require vendor/name:dev-main--with-dependenciescomposer.lockcomposer update vendor/name --with-dependencies-vvvcomposer require vendor/name:dev-main#abc123"dev-main as 1.0.0"requireCOMPOSER_AUTHauth.jsonCould not fetchgit clone