正确写法是使用”dev-分支名”格式并配置vcs仓库:{ “repositories”: [{ “type”: “vcs”, “url”: “https://github.com/vendor/package.git” }], “require”: { “vendor/package”: “dev-main” }}。
composer install 指定 Git 分支的正确写法
直接在 composer.json 里用分支名当版本号是常见误区,比如写 "dev-main" 或 "dev-develop" 看似合理,但 Composer 默认会拒绝安装未加 -dev 后缀的非稳定分支(即使远程存在),且不自动 fetch 最新提交。
必须显式声明为 dev- 前缀 + 分支名,并确保仓库 type 是 vcs(Git):
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/vendor/package.git"
}
],
"require": {
"vendor/package": "dev-main"
}
}
注意:dev-main 中的 main 是分支名,不是标签;Composer 会拉取该分支 HEAD 对应的 commit。
安装特定 commit 或带 ref 的 dev 版本
有时需要锁定到某个具体提交,或临时测试一个尚未合并的 PR 分支,这时不能只靠分支名 —— 分支可能被 force-push 覆盖,导致行为不可控。
- 用
dev-branch-name#commit-hash格式,例如:"dev-main#abc1234" - 也可以用
dev-branch-name#ref=xxx,其中ref可以是 tag、commit、甚至 GitHub PR 的 merge commit(如refs/pull/123/merge) - 如果项目未在 Packagist 注册,且你本地改了代码又想快速测试,可配合
pathrepository 类型,但要注意composer install会跳过 autoloader 生成,需手动运行composer dump-autoload
为什么 composer require vendor/package:dev-main 有时失败?
常见原因不是命令写错,而是 Composer 默认禁用不稳定包(minimum-stability 设为 stable),而 dev- 开头的版本一律视为 dev 稳定性级别。