composer 支持直接从 git 仓库安装包,只需在 repositories 中配置 type 为 vcs、url 为可 clone 的 git 地址,并在 require 中用 dev-前缀指定真实存在的分支(如 dev-main)或标签(如 1.2.0)。

怎么让 composer 从 Git 仓库装包
直接支持,不用额外插件。只要 Git 仓库里有符合 Composer 规范的 composer.json(哪怕没发版),就能装。
关键在 repositories 配置——它告诉 Composer:“这个包不在 Packagist,去这个 Git 地址找”。
- 必须用
vcs类型,不是package或path - URL 必须是可被
git clone的地址(https://或git@均可) - 分支名、tag 名要和 Git 仓库里真实存在的一致,大小写敏感
- 如果仓库私有,确保运行
composer install的机器已配好 SSH key 或已登录 Git 凭据
示例:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/your-org/your-package.git"
}
],
"require": {
"your-org/your-package": "dev-main"
}
}
dev-master 还是 dev-main?分支名怎么写
Composer 不自动猜默认分支。Git 仓库主分支叫 main,就写 dev-main;叫 master,才写 dev-master。写错会报 Could not find package ... matching your minimum-stability。
-
dev-前缀是强制的,表示开发分支,不是随便加的 - 标签(如
v1.2.0)直接写"1.2.0",不用加dev- - 提交哈希可以写成
"dev-main#abc1234",但仅限调试,别进生产composer.lock - 如果分支含斜杠(如
feature/login),写成dev-feature/login,Composer 支持
为什么 composer update 不拉最新 commit
因为 Composer 默认会缓存 Git 克隆结果,并复用本地 vendor/ 下的副本,不重新 fetch。尤其当你改了远程分支 HEAD,本地 lock 文件却还记着旧 commit。
- 先删
vendor/your-org/your-package和composer.lock中对应行(或整行删后重装) - 加
--prefer-source强制走git clone而非 dist 包:composer update your-org/your-package --prefer-source - 确认 Git 仓库本身已
push,且分支指针确实前进了——有时本地 commit 没 push,误以为“更新了” - CI 环境常见问题:Git shallow clone 导致无法 checkout 其他分支,需配置
fetch-depth: 0
私有仓库 + 团队协作时最容易漏的三件事
不是权限问题本身难,而是错误信号太弱:可能静默 fallback 到 Packagist 上同名包,或者卡在 “Resolving dependencies…” 十几分钟没反应。
- 所有协作者机器都得能
git clone成功——别只测自己本机,CI、测试机、新同事都要验 -
composer.json里的name字段必须和require中写的完全一致(包括大小写、连字符),否则 Composer 找不到匹配 - 别把
repositories写进项目级composer.json就完事;如果包 A 依赖包 B(都是私有 VCS),B 的composer.json也得声明自己的repositories,否则 A 安装时找不到 B
真正麻烦的从来不是语法,是仓库可见性、分支命名一致性、以及谁在什么时候清了哪台机器上的缓存。










