CI中composer install卡在Cloning是因误用--prefer-source且构建机缺Git或SSH配置;应改用--prefer-dist并禁用dev依赖与autoloader扫描。

为什么CI里composer install卡在Cloning into 'vendor/xxx'?
大概率是误用了--prefer-source,而构建机没装 Git 或 SSH 配置不全。CI 环境通常禁用 Git、屏蔽 GitHub 域名、或没配 deploy key,--prefer-source 会直接失败或无限等待。
正确做法是明确加--prefer-dist,或确保composer.json里没全局设"preferred-install": "source"。CI 脚本里建议显式声明:
composer install --no-dev --prefer-dist --optimize-autoloader
这样跳过 Git 克隆、跳过 dev 依赖、跳过 autoloader 扫描,三重提速。
本地调试时git checkout进不去vendor目录?
因为默认走--prefer-dist,解压后没有.git目录,ls -A vendor/monolog/monolog | grep git 返回空——说明它根本不是 Git 仓库。
要支持git checkout dev-main或git diff,必须用--prefer-source安装该包:
composer require monolog/monolog --prefer-source- 或只更新某一个:
composer update monolog/monolog --prefer-source - 进
vendor/monolog/monolog后执行git log -n 3确认有提交历史
注意:composer update默认不会保留你本地的git commit,改完记得先git push到自己的 fork。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
preferred-install配置写错导致全项目变慢?
常见翻车点是把"*": "dist"写在前面,比如:
"config": { "preferred-install": { "*": "dist", "myorg/*": "source" } }
这样myorg/*永远不生效——通配符*已匹配所有包,后面规则被忽略。正确顺序是「精确优先」:
"config": { "preferred-install": { "myorg/*": "source", "*": "dist" } }
另外,"monolog"不等于"monolog/*";前者是无效匹配(缺/),后者才能命中monolog/monolog和monolog/php-handler。
用--prefer-source就能拿到最新代码?
不能。它克隆的是composer.lock里锁定的 commit hash,不是main分支头。比如 lock 文件里记着"reference": "a1b2c3d",--prefer-source就只检出那个 commit,哪怕远程main已推了 20 个新提交。
想拉最新,得先git pull进对应vendor子目录,或改用composer update --prefer-source重新解析 lock。
真正影响「是否最新」的,是包作者有没有打新 tag、有没有更新composer.json里的version字段,跟安装方式无关。

















