Composer支持通过"dev-分支名"安装任意Git分支,需在repositories中声明VCS源,使用composer require或修改composer.json实现,更新需显式执行composer update并注意分支存在性。

直接在 composer.json 中指定 Git 分支名即可安装开发版包
Composer 本身不区分“正式版”或“开发版”,它只认版本约束和源类型。只要包的仓库是公开可访问的 Git 地址(如 GitHub、GitLab),你就能通过 "dev-分支名" 这种写法拉取对应分支的最新提交,无需额外插件或配置。
常见错误是误以为必须用 dev-master,其实任意分支都支持,比如 dev-feature/login-v2、dev-release/2.4.x 都合法。
- 分支名必须加
dev-前缀,否则 Composer 会当成稳定版本号去 Packagist 查找 - 如果分支名含斜杠(如
feature/auth),必须写成dev-feature/auth,不能省略dev- - Composer 默认不会自动更新已安装的
dev-分支包,需显式运行composer update vendor/package-name
使用 repositories 指向私有或非 Packagist 托管的 Git 仓库
当包不在 Packagist 上,或你想覆盖官方源(比如用自己 fork 的分支),就得手动声明 repositories。它告诉 Composer:“这个包的源在这里,别去 Packagist 找。”
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/yourname/laravel-scout"
}
],
"require": {
"laravel/scout": "dev-fix-redis-timeout"
}
}
注意:url 必须是完整 Git 地址;type 固定为 vcs;require 中的包名仍用原始命名(如 laravel/scout),不是你 fork 的用户名。
- 若多个包来自同一仓库(如 monorepo),Composer 会自动识别其下所有子包,前提是每个子包都有独立的
composer.json - 私有仓库需提前配置 SSH key 或 GitHub token,否则
composer install会卡在认证环节 - 运行
composer update后,Composer 会把该分支 HEAD 提交哈希写入composer.lock,下次安装即锁定到该次提交
composer require 命令行快速安装分支版
不用手动改 composer.json,一条命令就能完成添加 + 安装:
composer require monolog/monolog:dev-main --with-all-dependencies
关键点:
-
dev-main是 GitHub 新默认分支名,旧项目可能仍是dev-master -
--with-all-dependencies确保依赖树中其他包也按兼容版本更新,避免冲突 - 如果提示
Could not find a version of package ... matching your minimum-stability,说明当前"minimum-stability"是stable,需临时放宽:composer require monolog/monolog:dev-main --stability=dev
分支安装后如何更新到最新提交
分支版不会随 composer update 自动刷新,因为 composer.lock 锁定了具体 commit。要强制拉取最新代码,有两个可靠做法:
- 删掉
vendor/包名目录 +composer.lock中对应条目,再运行composer install - 更推荐:用
composer update vendor/package-name --with-dependencies,它会重新解析分支 HEAD 并更新 lock 文件 - 若只想看差异而不安装,可用
git -C vendor/vendor-name/package-name log --oneline -5查看当前检出的提交
真正容易被忽略的是:分支名变更(比如 dev-old-feature 被删掉)会导致 composer update 失败,报错 Could not find branch dev-old-feature —— 此时必须手动修改 composer.json 和 composer.lock,否则无法继续。










