dev-分支名必须与git实际分支完全一致,大小写敏感且不可简写;需显式加--stability=dev才可安装,否则因minimum-stability默认为stable而失败。

dev-分支名必须和 Git 实际分支完全一致
Composer 不解析“环境”,它只按字符串匹配 Git 分支。写 dev-master 却仓库只有 main 分支?直接报错 Could not find a version of package matching your minimum-stability。
常见错误包括:
-
dev-Main≠dev-main(大小写敏感) -
dev-feature/login不能简写成feature/login或dev-feature%2Flogin - 私有仓库没在
repositories中声明,dev-再准也查不到
验证方式很简单:composer show vendor/pkg 看返回的可用版本列表里有没有你写的分支名。
require dev-分支必须显式加 --stability=dev
默认 minimum-stability 是 stable,而所有 dev- 开头的版本都被视为 dev 稳定性级别,不加参数就无法命中。
安全做法是每次手动指定:
composer require vendor/pkg:dev-main --stability=dev
别永久把 minimum-stability 改成 dev——这会让 monolog/monolog 这类稳定包也降级到 dev-develop,lock 文件瞬间不可控。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如果已设为 dev 却仍失败,先检查:repositories 是否漏配、SSH key 是否可用、Git URL 是否带认证前缀(如 https://token:x-oauth-basic@github.com/...)。
commit hash 锁进 composer.lock 后,force push 就会失效
dev- 分支依赖最终被解析为具体 commit hash,并写入 composer.lock。这意味着:
- 上游
git push --force覆盖该 commit → 下次composer install报错Failed to download vendor/pkg: The "https://..." file could not be downloaded (HTTP/2 404) - CI 构建中若用
git checkout -b feature/x origin/feature/x后再composer install,实际装的是旧 hash,不是最新代码
解决办法只有两个:
- 开发阶段用
composer update vendor/pkg --with-dependencies主动刷新 hash(适合调试) - 生产部署坚决不用
dev-分支,改用1.2.x-dev或打 tag(如v1.2.3),靠语义化版本约束保一致性
环境变量 + 脚本控制 require 的真实生效路径
Composer 本身不读环境变量,但你可以用脚本在安装前动态改 composer.json ——只是要承担后果:
- 改完立刻
composer update --lock,否则composer.lock哈希失效,CI 构建不可重现 - 必须确保所有环境(本地、CI、prod)都走同一套脚本逻辑,否则
composer.lock和实际安装结果对不上 - 更稳妥的做法是:把分支选择逻辑下沉到代码层,比如用
if ($_SERVER['APP_ENV'] === 'local') { require_once 'vendor/autoload-dev.php'; },而不是让 Composer 担这个责任
真正需要分支隔离的场景(如灰度 SDK),建议用 path 类型 repo + 目录软链替代:本地开发指向 ../sdk/dev,CI 测试指向 ../sdk/staging,构建镜像时 COPY 固定版本。Composer 只管“装”,别让它“做决定”。










