指定 dev 分支需在包名后加 #分支名,如 laravel/laravel#dev-develop;#main 可省略 dev- 前缀;--prefer-source 确保克隆 Git 仓库而非 ZIP;注意分支存在性、大小写及权限配置。

composer create-project 怎么指定 dev 分支
直接用 --stability=dev + --prefer-source 不够,它只放宽稳定性约束,不等于拉 dev 分支。真正生效的是在包名后加 #分支名,比如 laravel/laravel#dev-develop。
- 必须用
#分隔,不是@或: - 分支名要写全,
dev-master、dev-main、dev-feature/x都可以,但不能省略dev-前缀(除非远程分支名本身没这个前缀) - 如果目标分支是
main且远程没设dev-main别名,直接写#main即可
为什么有时 #dev-xxx 拉不到最新提交
因为 create-project 默认会执行 composer install,而 composer.json 里可能锁定了 "laravel/framework": "^10.0" 这类版本约束,导致即使指定了分支,最终仍按 composer.lock 或版本规则降级安装。
- 加
--no-install跳过自动 install,再手动composer install --ignore-platform-reqs - 或先删掉项目根目录的
composer.json里的require版本号,改成"laravel/framework": "dev-main as 10.99"这种开发版别名写法 -
--prefer-source很关键:确保拉的是 Git 克隆而非 zip 包,否则分支信息丢失
常见错误:No driver found for xxx.git 或 Could not find package
错误信息像 [InvalidArgumentException] Could not find package vendor/name 或 No driver found for https://xxx.git,通常不是分支问题,而是:
- 包名拼错,比如把
spatie/laravel-permission写成spatie/laravel-permissions(多了一个 s) - 私有仓库没配
auth.json,或 token 权限不足(需要repo而非仅read:packages) - 分支名大小写敏感:GitHub 上
Dev-Main和dev-main是两个分支,写错就 404 - 用了 HTTPS 地址当包名,例如
https://github.com/xxx/yyy.git#main——create-project不接受 URL,只认vendor/name格式
替代方案:用 git clone + composer install 更可控
当 create-project 行为不可预测时(比如某些自建 Packagist 或 fork 项目),直接走 Git 更稳:
git clone -b dev-main --depth 1 https://github.com/vendor/name.git myproject cd myproject composer install --no-dev --prefer-dist
-
--depth 1加速克隆,避免拉完整历史 - 进目录后手动
composer install,能看清每一步依赖解析过程 - 若需保留 .git 并后续 push,去掉
--depth 1;若只是临时试用,加--single-branch更干净
--prefer-source 和分支名是否真实存在于远端——建议先 git ls-remote --heads https://github.com/vendor/name.git 确认分支存在再执行。










