答案是composer install不查远程,只按lock文件的commit hash安装;必须先执行composer update --refresh刷新元数据,再运行composer require vendor/package:dev-main才能拉取最新提交。

composer install 为什么没拉到 dev-main 最新提交
因为 composer install 完全不查远程,它只按 composer.lock 里记录的 commit hash 去缓存或镜像找 ZIP 包——哪怕你刚 push 了新代码,只要 lock 文件没更新,它就当不存在。
常见现象:GitHub 上能看到 dev-main 的最新 commit,但 composer install 后 vendor/ 里还是旧 hash;composer update vendor/package 也显示 Nothing to install or update。
- 根本原因不是镜像没同步,而是本地
packages.json缓存过期(默认 15 分钟),Composer 根本没去镜像站查新分支信息 -
composer clear-cache只清 ZIP 包,不刷新元数据,对dev-main无效 - 必须先让 Composer 拉到最新元数据,再触发依赖重解析,否则 lock 文件永远“看不见”新 commit
强制同步 dev-main 分支元数据并更新 lock
分两步走:先刷新远程索引,再显式要求装指定分支。跳过任何一步都会卡在旧状态。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 刷新元数据(Composer ≥ 2.5):
composer update --refresh—— 它只删packages.json和 provider 文件,不碰 ZIP 缓存,快且精准 - 老版本 Composer(rm -rf $(composer config --global cache-dir)/repo/https---mirrors.aliyun.com-composer
- 然后执行:
composer require vendor/package:dev-main(注意冒号后无空格) - 分支名含斜杠(如
feature/login)必须加引号:composer require vendor/package:"dev-feature/login"
私有仓库或未上 Packagist 的包怎么拉 dev 分支
如果包不在 Packagist,或用的是 GitHub 私有库,composer require 默认找不到,必须提前声明源类型。
- 在
composer.json的repositories字段加 VCS 源:{"type": "vcs", "url": "https://github.com/yourname/repo"} - 确保该仓库的
dev-main分支存在且可公开访问(私有库需配 SSH key 或 token) - 执行
composer require前,先跑一次composer update --refresh,否则新 repository 配置不会被读取 - 装完后
vendor/下看到的是 commit hash,不是分支名——这是正常行为;后续要拉最新提交,得再跑composer update vendor/package
镜像同步延迟导致 dev 分支拉不到最新 commit 怎么办
国内镜像(阿里云、腾讯云)对 dev- 分支的同步普遍有 5–15 分钟 lag,尤其非 tagged 提交。不能只等,得验证+绕过。
- 手动验证镜像是否已同步:
curl -s https://mirrors.aliyun.com/composer/p/vendor/package-name.json | grep -A2 dev-main,看reference字段是否为你期望的 commit - 若未同步,临时直连 Packagist 调试:
COMPOSER_REPO_PACKAGIST=https://packagist.org composer require vendor/package:dev-main - 别信
--no-cache—— 它只禁用 ZIP 缓存,不影响元数据复用;真正要的是--refresh或手动删 repo 缓存 - CI 流水线中建议加
composer install --dry-run并检查输出是否含镜像域名,避免 fallback 到官方源导致结果不一致
最易被忽略的点:dev 分支没有语义化版本约束,composer update 默认不碰它;你必须用 require 显式声明,且每次拉新 commit 都得重新触发这个流程——它不像 tagged 版本那样能靠 ^ 自动滚动。










