composer 的 type 必须设为 "vcs",设为 "git" 或留空会导致仓库配置被静默忽略;url 需为可直接 git clone 的 ssh 地址(如 git@gitlab.example.com:acme/utils.git),且 ssh 连通性、权限(~/.ssh 700、私钥 600)、ssh-agent 加载及 ssh-keyscan 预埋 host key 缺一不可。

composer.json 里 type 必须设为 vcs,不是 git
Composer 只认 vcs 类型的仓库定义,写成 "type": "git" 或留空,整个仓库配置会被静默忽略——不报错、不警告、也不拉代码。常见错误是直接照抄 Git URL 格式,却忘了改 type 字段。
正确写法示例:
{
"repositories": [
{
"type": "vcs",
"url": "git@gitlab.example.com:acme/utils.git"
}
]
}
-
url必须是能直接git clone的地址:SSH 格式必须含@和:,结尾带.git - 若用
git@host:path/repo.git,确保本地ssh -T git@host能通 - 不要写成
https://混搭 SSH 配置,协议和认证方式必须一致
私钥路径不归 Composer 管,由 SSH 自己决定
Composer 本身不读取或指定私钥文件路径,它只是调用系统 git 命令,而 git 依赖 SSH 客户端行为。所以私钥位置、是否加载、用哪一把,全看你的 SSH 配置。
关键点:
- 默认私钥路径是
~/.ssh/id_rsa(RSA)或~/.ssh/id_ed25519(Ed25519),不用额外声明 - 如果用了非默认路径(比如
~/.ssh/acme-deploy-key),必须在~/.ssh/config中显式绑定:
Host gitlab.example.com
IdentityFile ~/.ssh/acme-deploy-key
User git
- 确认
ssh -T git@gitlab.example.com能成功返回欢迎信息,否则 Composer 一定失败 - 权限问题比密钥内容更常见:
~/.ssh目录需 700,私钥文件需 600;否则 SSH 会直接拒绝使用
auth.json 不参与 SSH 认证,删了也没影响
auth.json 只用于 HTTP(S) 场景下的 http-basic 或 github-oauth 认证。一旦你用的是 git@... 这种 SSH URL,auth.json 文件完全不被读取——放哪儿、写什么都无关紧要。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见误操作:
- 在
auth.json里填git@gitlab.example.com的用户名密码,以为能生效 → 实际无效 - 把
auth.json权限设成 644,结果 HTTPS 场景下还报静默跳过 → 但 SSH 场景下根本不受影响 - 混淆了 Bitbucket/GitHub 的 token 配置和 SSH 密钥逻辑 → 它们属于两套互不干扰的通道
CI/CD 环境下私钥注入必须走 SSH agent
GitLab CI、GitHub Actions 等环境不能直接把私钥文件丢进 ~/.ssh/ 就完事。因为多数 runner 是无状态容器,且默认没启动 ssh-agent,导致 git clone 找不到可用密钥。
正确做法是:
- 把私钥内容作为 CI 变量(如
DEPLOY_SSH_KEY)注入,然后在 job 开头手动加载:
eval $(ssh-agent -s) echo "$DEPLOY_SSH_KEY" | ssh-add - mkdir -p ~/.ssh ssh-keyscan gitlab.example.com >> ~/.ssh/known_hosts
- 必须加
ssh-keyscan预埋 host key,否则首次连接会卡住(交互式 yes/no 提示) - 别用
chmod 600去改变量内容的权限——变量里没有文件系统权限概念,那是对磁盘文件的操作
最常被忽略的一点:SSH 私钥是否被 ssh-agent 管理,决定了它能否被子进程(比如 Composer 调用的 git)继承使用。裸放一个私钥文件在磁盘上,却不启动 agent 或不 ssh-add,等于没配。










