私有 git 仓库必须在 composer.json 的 repositories 字段中显式声明为 "type": "vcs",否则 composer install 无法识别;url 需可直接 git clone(含 .git 后缀),认证须完整配置(https 用 auth.json,ssh 用 ssh-agent),包名与 tag 必须严格匹配,修改后需 clear-cache 并用 diagnose 排查。

私有 Git 仓库必须在 composer.json 的 repositories 字段里显式声明为 "type": "vcs",否则 composer install 根本不会去拉它——哪怕 URL 正确、认证完备、包名匹配,也照样报 Could not find package。
repositories 必须手动加,composer require 不会自动补
很多人执行 composer require vendor/name 后发现装不上,是因为它只往 require 里写了一行,repositories 完全没动。CI 或新机器上首次运行直接失败。
-
repositories是项目级配置,必须手写进项目根目录的composer.json,不能靠全局或依赖包自带 - 类型只能是
"vcs",不是"git"、"package"或"composer";写错就等于没配 - URL 要能被系统 shell 直接
git clone成功,比如"https://gitee.com/org/pkg.git"或"git@gitlab.example.com:group/pkg.git",别漏掉.git后缀(SSH 必须带,HTTPS 推荐带)
认证方式选 HTTPS 还是 SSH?关键看环境可控性
HTTPS 靠 auth.json 注入 Token,SSH 靠本地密钥和 ssh-agent。两者都不能“半配”——配了 URL 却没配认证,或者认证路径/权限错了,都会静默失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- HTTPS:Token 必须放
auth.json(项目根目录或~/.composer/auth.json),文件权限必须是600,内容结构为{"http-basic": {"gitee.com": {"username": "anything", "password": "token"}}} - SSH:运行
ssh-add -l确认密钥已加载;用ssh -T git@gitee.com测试连通性;GitLab 自建实例若改了端口,得在~/.ssh/config显式写Port 2222 - 别把 Token 拼进 URL(如
https://token@github.com/...)——现代 Git 客户端会拒绝,且不安全
包名和版本必须严格对齐,大小写敏感、tag 驱动
Composer 查包不看 Git 地址,只认 name 字段;也不读私有库 composer.json 里的 version,只认 Git tag 或分支名。
- 私有库根目录
composer.json中的"name"必须和你require的完全一致,包括大小写和斜杠方向,比如"MyOrg/utils"≠"myorg/utils" - 要用语义化版本(如
"^1.0"),仓库必须打对应 tag:git tag v1.0.0 && git push origin v1.0.0;没 tag 就只能用"dev-main"这类分支别名 - 分支别名要带
-dev后缀才合法,例如"dev-main as 1.0.x-dev";否则minimum-stability默认为stable时会被跳过
缓存和诊断常被忽略,但往往是失败的真正原因
Composer 缓存会记住上次失败的结果,即使你改好了配置,composer install 仍可能走旧路径;composer diagnose 能暴露凭据路径、网络访问、SSL 设置等底层问题。
- 每次改完
repositories或auth.json,先跑composer clear-cache再试 -
composer diagnose会检查auth.json是否可读、是否权限正确、HTTPS 是否被禁用(内网自签名证书需设"secure-http": false) - 临时验证是否真能拉到代码:加
--prefer-source参数,强制走git clone,避免 zip 缓存干扰










