结论:dev-master 已基本失效,2026年起主流包默认分支为main;查真实分支名须执行git ls-remote --symref https://github.com/vendor/package.git HEAD,严格按返回值(如refs/heads/main)使用dev-main,大小写敏感且不可省略dev-前缀。

直接说结论:dev-master 已基本失效,2026年起绝大多数主流包仓库默认分支是 main,不是 master;硬写 dev-master 会触发 Could not find package 报错,不是配置问题,是远程根本不存在该分支。
怎么查清目标包的真实默认分支名
别猜、别套旧文档。运行这条命令,它返回什么,你就用什么:
git ls-remote --symref https://github.com/vendor/package.git HEAD
如果输出是 ref: refs/heads/main,就必须用 dev-main;如果是 refs/heads/develop,就得写 dev-develop。GitLab、Gitee、私有 Git 仓库同理——分支名必须完全一致,且区分大小写。
-
dev-Main≠dev-main(大小写敏感) - 含斜杠的分支如
feature/login,必须写成dev-feature/login,不能省略dev-前缀 - 若返回
error: Could not resolve host,说明网络或权限问题,不是分支名错了
为什么加了 dev-main 还报 “no matching package found”
这不是分支名问题,而是 Composer 的稳定性策略在拦截。默认 minimum-stability 是 stable,所有 dev- 开头的引用都会被跳过。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 临时解决:加
--stability-dev(简写-s dev),例如:composer require vendor/package:dev-main -s dev - 长期协作:在项目根
composer.json中显式设"minimum-stability": "dev",同时配"prefer-stable": false,否则它仍可能 fallback 到最近的v2.3.0等 stable tag - 漏掉
-s dev或没改minimum-stability,dev-main就等于没写
装上了,但每次 composer update 都拉新代码?这很危险
dev-main 是浮动的,不锁定具体提交,CI 构建不可重现,本地能跑线上崩是常态。
- 真正可控的写法是
"vendor/package": "dev-main#7f8c4d9a2e1b3c4d5e6f7a8b9c0d1e2f3a4b5c6d"—— 必须用完整 40 位 SHA1,缩写(如abc1234)在 CI 环境大概率失败 - 若需参与开发并让依赖解析优先选这个分支,可用虚拟高版本号:
"dev-main as 999.999.999",但仅限require场景,别用于生产 - 装完立刻执行
composer show vendor/package,确认输出中source.reference是你指定的哈希,且source.type是git,不是dist
私有仓库装不上 dev-main?缺 repositories 配置
Composer 不知道去哪找你的私有 Git 库,不会自动去 GitLab 或 Gitee 搜索。必须在项目根 composer.json 顶层声明源:
{
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.example.com/group/private-package.git"
}
]
}
-
type必须是vcs(不是package或artifact) -
url必须可访问:SSH 地址需配好 key,HTTPS 地址需带认证(通过auth.json) - 若已配置但还报
Package not found,先运行composer clear-cache,再试
最麻烦的不是装不上,而是装上了却没意识到:命名空间可能改了、PHP 最低版本升到 8.3、某个方法已被静默移除——这些都不会在 composer require 时报错,只等第一次调用才崩。

















