要安装 dev-main 或 dev-develop 分支,需在 composer.json 中设 "minimum-stability": "dev" 并在 require 中写 "vendor/package": "dev-main";同时确保 composer.lock 同步更新,且私有仓库 URL 正确配置为 vcs 类型。

怎么让 Composer 安装 dev-main 或 dev-develop 分支?
默认情况下,Composer 只拉稳定版(stable),想装开发分支得显式告诉它“允许不稳定的版本”。关键不是改命令,而是改 composer.json 的约束策略。
- 在
require里写"vendor/package": "dev-main"不够——Composer 仍会因稳定性限制拒绝安装 - 必须同时设置
"minimum-stability": "dev",并加"prefer-stable": true(可选,避免所有包都降级) - 如果只临时装一个包,用
composer require vendor/package:dev-main --no-update再手动改 stability,不如直接改配置后composer update vendor/package
beta、rc、dev- 版本号到底怎么写才有效?
Composer 对版本字符串有严格解析规则,写错就 fallback 到 latest stable 或报错。
-
"1.2.0-beta.1"有效,但"1.2.0-beta1"(缺点)会被当成1.2.0-beta1@stable,可能被忽略 -
"dev-feature/auth"仅在 Git 仓库存在该分支时生效;若远程已删分支,会报Could not find a matching version - 别用
^1.2@beta——@后缀只对单个包版本有效,不能和 caret 范围混用
为什么 composer install 有时不装 dev 版,哪怕 composer.json 里写了 dev-?
因为 composer.lock 锁死了具体 commit hash 和稳定性标识,它比 composer.json 优先级更高。
- 改完
composer.json后没运行composer update vendor/package,lock文件不会更新 - 锁文件里某条记录的
"version": "dev-main"下有"reference"字段,如果对应分支 HEAD 已变,但没重 update,就会继续用旧 commit - 执行
composer install时加--ignore-platform-reqs不解决这个问题,那是 PHP 扩展依赖问题
用 repositories 指向私有 Git 仓库时,dev- 分支为啥总装失败?
常见于 fork 后想试改某个包,但 Composer 默认不 fetch branches,除非明确声明类型和 URL 规范。
- 必须设
"type": "vcs",且 URL 必须是可 clone 的地址(如https://github.com/you/package.git),不能是网页 URL - 如果仓库是 GitHub/GitLab,Composer 能自动识别分支;但自建 Git 服务器需确保支持
info/refs接口 - 遇到
Failed to execute git remote set-url origin ...,大概率是本地 Git 配置了全局 credential helper,而私有仓库未授权——临时加"no-api": true可绕过元数据探测,但要承担无法解析分支名的风险










