答案是Composer默认只搜索stable版本,dev-main等开发分支需加-s dev参数才被识别。因dev-前缀非正式版本号,不加该参数则Composer根本不会查询对应分支;私有库还需在repositories中配置vcs源,且分支名须与远程仓库完全一致、大小写敏感。

直接用 composer require vendor/name:dev-branch 就能装,但 90% 的失败都卡在没加 -s dev 或分支名写错。
为什么 composer require vendor/name:dev-main 报 “Could not find package”
Composer 默认只搜 stable 版本,dev-main 这类带 dev- 前缀的不是正式版本号,而是开发分支别名,必须显式允许解析开发版才能命中。
- 不加
-s dev(即--stability=dev),它压根不会去查这个分支是否存在 - 加了
-s dev后,Composer 才会去 Packagist 或你配置的repositories里找对应仓库,并尝试git clone - 注意:
-s dev是本次命令临时生效,不会改你项目composer.json里的minimum-stability
dev-feature/login 这种含斜杠的分支怎么写
斜杠不能直接出现在命令行或 JSON 字符串里,否则会被 shell 当路径分隔符,或被 Composer 解析失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 命令行必须用双引号包裹整个版本字符串:
composer require "vendor/name:dev-feature/login" -s dev - 写进
composer.json的require里也得加引号:"vendor/name": "dev-feature/login" - 别手滑写成
dev-feature-login——那是另一个分支名,和feature/login完全无关
私有仓库或非 Packagist 包怎么装指定分支
Composer 不知道从哪拉代码,光写 vendor/name:dev-main 没用,会直接报 Package not found。
- 必须在项目根
composer.json顶层加repositories块,且type必须是vcs - 示例配置:
{ "repositories": [ { "type": "vcs", "url": "https://gitlab.example.com/group/private-package.git" } ] } - URL 必须是可访问的 Git 地址,且该仓库的
composer.json中name字段要和require里写的完全一致(大小写敏感)
装完发现不是最新 commit,或者反复装到旧版本
这不是网络问题,是 Composer 的缓存和锁定机制在起作用——它把分支映射为当前 HEAD 的 commit hash 并锁进 composer.lock,下次 install 就直接还原,不会重新 fetch。
- 想强制拉最新:
composer update vendor/name,而不是install - 如果连
update都没更新,先删掉vendor/name和composer.lock里对应项,再重试 - 生产环境严禁直接依赖
dev-xxx,务必用dev-xxx#abc1234锁定具体 commit hash
最常被忽略的一点:分支名必须和远程仓库里真实存在的分支**完全一致、区分大小写**。GitHub 新仓库默认是 main,不是 master;写错一个字母或大小写,就进 no matching package 的死循环。

















