composer config github-protocols 是设置 GitHub 仓库克隆时优先尝试的协议顺序,如["ssh","https"]表示先试SSH再fallback HTTPS,仅影响composer install/update过程,不改变本地Git配置。

composer config github-protocols 是什么
这个命令不是用来“切换”协议的开关,而是告诉 Composer 在遇到 GitHub 仓库时,**优先尝试哪些协议**。它只影响 composer install 或 composer update 过程中对 GitHub 的源(比如 github.com)的克隆/下载方式,不改变你本地 Git 配置或 SSH 密钥状态。
常见误解是:设成 ["ssh"] 就一定能走 SSH —— 实际上,如果没配好 SSH key 或 GitHub 不认你,Composer 会静默 fallback 到 HTTPS,甚至失败。
怎么设置 protocol 优先级(全局 or 项目)
用 composer config 命令写入 github-protocols 配置项,值是一个字符串数组:
- 全局设置(影响所有项目):
composer config -g github-protocols '["https","ssh"]' - 当前项目设置(只影响本目录
composer.json所在项目):composer config github-protocols '["ssh","https"]'
顺序很重要:Composer 会按数组顺序依次尝试。比如 ["ssh","https"] 表示先试 SSH,失败再试 HTTPS;反过来则优先 HTTPS。
注意:'["ssh","https"]' 中的单引号不能省,否则 shell 会报错;双引号内部的引号必须是英文,且整个值必须是合法 JSON 数组格式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么设了 ["ssh"] 还走 HTTPS?
Composer 并不校验你的 SSH 是否真能连 GitHub,它只是“尝试”。以下任一情况都会导致 fallback 到 HTTPS(甚至失败):
- 没在
~/.ssh/config里配好Host github.com段,或私钥路径不对 -
ssh -T git@github.com手动测试失败(比如权限拒绝、unknown host) - GitHub token 权限不足(HTTPS 场景下依赖 token,而 SSH 不需要)
- 项目
composer.json里写了"repositories"并显式用了https://github.com/...URL —— 这种硬编码 URL 会绕过github-protocols
验证是否生效:运行 composer update -vvv,看日志里出现的是 Cloning git@github.com:xxx/yyy.git(SSH)还是 Cloning https://github.com/xxx/yyy.git(HTTPS)。
HTTPS 和 SSH 的实际影响差异
选哪种不只是“习惯问题”,直接影响凭据管理、CI 环境适配和错误表现:
- HTTPS:依赖
GITHUB_TOKEN或git credential缓存;适合 CI(如 GitHub Actions),但 token 权限要开repo;报错常是401 Unauthorized或failed to clone - SSH:依赖本地
~/.ssh/id_rsa(或对应私钥)+ GitHub 账户已添加公钥;不走 token;报错多为Permission denied (publickey)或超时 - 性能上无明显差别;但 SSH 在频繁更新私有 repo 时更稳定(不用反复输 token 或处理过期)
私有包场景下,如果团队统一用 SSH,就别在 github-protocols 里留 https——避免因 token 缺失导致偶然 fallback 成功,掩盖配置问题。

















