私有仓库安装dev分支需用--prefer-source+别名绕过语义校验,或通过type为package的repositories手动声明commit hash;ci装不到常因auth.json缺失、token权限不足、ssh密钥未加载或分支名大小写错误。

私有仓库里怎么装 dev 分支,又不被自动降级
直接写 "vendor/pkg": "dev-main" 很可能装不上最新提交——因为 composer.json 里其他依赖的版本约束(比如 "laravel/framework": "^10.0")会强制 Composer 回退到兼容该约束的最近 tag,哪怕你指定了分支。这不是分支没拉到,是安装阶段被“矫正”了。
真正生效的组合是:
-
--prefer-source:确保克隆 Git 仓库而非下载 zip,保留分支/提交上下文 -
--no-install(配合create-project):跳过默认的install,避免被 lock 或版本约束干扰 - 手动改
composer.json中目标包的 require 条目为"vendor/pkg": "dev-main as 10.99"这类别名写法,绕过语义化版本校验 - 再运行
composer install --ignore-platform-reqs完成加载
用 vcs repository 锁定私有仓库的特定 commit
裸哈希如 a1b2c3d 在 require 字段里完全无效;Composer 不识别它。必须走 repositories + package 类型声明这条路。
关键点:
-
type必须设为package(不是vcs),才能手动控制reference -
source.reference填完整 40 位 commit hash,大小写敏感 -
version字段值必须带dev-前缀,例如"dev-a1b2c3d4e5f67890123456789012345678901234" -
name必须与私有仓库中composer.json的name完全一致,一个字母都不能错
否则会报 No driver found for xxx.git 或 Could not find package,实际是 name 不匹配或 hash 不存在于该仓库。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么私有仓库加了 dev 分支,CI 还是装不到?
常见原因不是配置错,而是权限和网络链路断在中间:
- CI 机器没配
auth.json,或 token 权限不足(GitHub 需reposcope,GitLab 需read_repository) - 私有 Git 地址用了 SSH(
git@gitlab.com:xxx),但 CI 环境没加载对应私钥,应统一改用 HTTPS + token - 分支名大小写错误:
Dev-Main和dev-main是两个分支,GitHub/GitLab 都区分大小写 - 私有仓库本身未开启 Git 服务或 Webhook 配置异常,导致 Composer 请求 404 或超时
验证方式:在 CI 机器上手动跑 composer diagnose,重点看 Repositories 检查结果和 HTTP request 是否成功。
dev 分支依赖要不要进 composer.lock?
要,而且必须进。只要它出现在 require 或 require-dev 里,执行 composer update 或 composer install(首次)后,lock 文件就会记录下该分支当前解析出的 commit hash、源地址、以及所有子依赖的精确版本。
但要注意:
- 这个 commit hash 是「快照」,不是「活引用」——下次
composer update时,如果分支有新提交,它不会自动更新,除非你删掉 lock 重来,或显式运行composer update vendor/pkg - 如果你希望每次 install 都拉最新 dev 提交,不能靠 lock 维持,得用
minimum-stability: dev+prefer-stable: false,但这会污染整个依赖树,不推荐
真正可控的做法,是把 dev 分支当作一个临时调试通道,上线前务必切换回稳定 tag,并更新 lock 后提交。










