Composer 安装私有 Git 仓库需在 composer.json 的 repositories 字段中声明 type 为 "vcs" 并使用完整克隆地址(如 https://github.com/username/repo.git 或 git@github.com:username/repo.git);稳定版本依赖 Git tag(如 1.0.0),而非 composer.json 中的 version 字段;SSH 方式需确保 SSH agent 正常、密钥可用,并注意缓存干扰,建议先手动 git clone 验证。

Composer 支持直接从 Git、Mercurial、SVN 等 VCS 仓库安装包,但必须显式声明为 vcs 类型,且仓库 URL 必须可被 Composer 解析 —— 否则会报 Could not find package 或跳过扫描。
如何在 composer.json 中声明私有 Git 仓库
Composer 不会自动扫描任意 Git 地址,必须在根项目 composer.json 的 repositories 字段中明确定义。类型必须设为 "type": "vcs",URL 必须是完整克隆地址(支持 HTTPS/SSH/Git 协议)。
常见错误:把 GitHub 个人主页 URL(如 https://github.com/username)或项目首页(https://github.com/username/repo)当仓库地址 —— 这会导致 Composer 无法获取 composer.json 和版本信息。
- ✅ 正确写法(HTTPS):
"url": "https://github.com/username/my-package.git" - ✅ 正确写法(SSH):
"url": "git@github.com:username/my-package.git" - ❌ 错误写法:
"url": "https://github.com/username/my-package"(缺.git后缀,部分场景可能侥幸成功,但不保证) - ❌ 错误写法:
"url": "https://github.com/username"(根本不是包仓库)
为什么 dev-main 能装上,但 1.0.0 找不到
Composer 依赖 Git 标签(tag)识别稳定版本。如果仓库没打符合语义化版本规范的 tag(如 v1.0.0、1.0.0),即使 composer.json 里写了 "version": "1.0.0",Composer 也不会认。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
关键点:Composer 读取的是 Git 的 tag 名称,不是 composer.json 里的 version 字段(该字段仅用于 dist 包或非 VCS 场景)。
- ✅ 有效 tag 示例:
1.0.0、v2.1.3、dev-v1.x - ❌ 无效 tag 示例:
release-1.0、my-first-stable、1.0.0-beta(除非你在require中显式写"dev-1.0.0-beta") - 执行命令打 tag:
git tag -a 1.0.0 -m "Release 1.0.0",再git push origin 1.0.0
使用 SSH 协议时权限和缓存问题
用 git@... 地址时,Composer 本质调用系统 git clone,所以依赖本地 SSH agent 和密钥配置。一旦失败,错误通常不直接暴露在 Composer 输出里,而是卡在 Cloning into '...'... 或报 Permission denied (publickey)。
更隐蔽的问题是 Composer 缓存:如果之前用 HTTPS 失败过,又切到 SSH,Composer 可能复用旧的失败缓存,导致重试仍失败。
- 排查 SSH 是否就绪:
ssh -T git@github.com(或对应 Git 服务商) - 清除相关缓存:
composer clear-cache,或删掉~/.composer/cache/vcs/下对应仓库目录 - 临时禁用缓存验证:
composer install --no-cache - 强制走 SSH(避免自动降级到 HTTPS):
git config --global url."git@github.com:".insteadOf "https://github.com/"
VCS 仓库配置真正卡住人的地方,往往不在语法,而在 Git 本身的状态 —— tag 是否推送、SSH 密钥是否加载、远程分支名是否含特殊字符(比如 feature/login#23 会被 Composer 解析失败)。动手前先确保 git clone 命令能手动跑通,比反复调 composer update 更省时间。

















