Git凭据管理器存错账号密码导致composer install卡在clone阶段,应删除对应域名的凭据条目(如Windows凭据管理器中github.com等),或临时禁用凭据助手验证;SSH方式需检查密钥加载、权限及config配置;HTTPS重定向问题需curl诊断状态码。

Git凭据管理器存了错的账号密码,导致composer install卡在clone阶段
Composer执行install时若启用了--prefer-source(或composer.lock里记录的是source类型),就会调用git clone。如果系统 Git 凭据管理器(Windows Credential Manager、macOS Keychain、Linux libsecret)里存了过期/错误的用户名密码,Git 会静默尝试、失败、重试,最终让 Composer 报类似fatal: Authentication failed或直接卡住不动。
这不是 Composer 配置问题,而是 Git 自己“记错了人”。验证方法很简单:新开终端,手动跑一遍 Composer 正在尝试的 clone 命令(从-vvv日志里复制出来),看是否同样失败。
- Windows:打开“Windows 凭据管理器” → “普通凭据”,删掉所有含
github.com、gitlab.com等域名的条目 - macOS:打开“钥匙串访问”,搜索
github.com,删掉类型为“internet password”的相关项 - Linux(GNOME):运行
git credential reject < /dev/tty,然后输入protocol=https、host=github.com、空行结束 - 统一保险操作:执行
git config --global --unset credential.helper临时禁用凭据管理器,改用 SSH 或手动输密码(仅调试用)
SSH密钥未加载或权限不对,Permission denied (publickey)反复出现
当你用git@开头的 URL(比如"url": "git@github.com:user/repo.git")时,Composer 会走 SSH 协议,完全绕过 HTTPS 凭据管理器。但Permission denied (publickey)不是因为没密钥,而是 SSH agent 没加载、密钥文件权限太松、或~/.ssh/config里 Host 别名没匹配上。
关键检查点:
- 运行
ssh-add -l确认密钥已加载;没输出就执行ssh-add ~/.ssh/id_rsa_personal - 密钥文件权限必须是
600:chmod 600 ~/.ssh/id_rsa_personal -
~/.ssh/config中对应 Host 的IdentityFile路径要绝对且存在,别写成~/开头(某些环境不展开) - 确保
composer.json里的仓库 URL 真的用了你定义的 Host 别名,例如git@github-personal:user/repo.git,而不是git@github.com:user/repo.git
HTTPS URL被自动重定向到登录页,触发Invalid credentials误判
某些私有 Git 服务(尤其自建 Gitea、旧版 GitLab)对未认证的 HTTPS 请求返回 302 跳转到 Web 登录页,而非标准的 401。Composer 解析 HTML 响应体失败后,统一抛出Invalid credentials——这和 token 配置无关,纯属服务端行为误导。
GInstall OneClick — 一键安装 GitHub 项目:规划、克隆、安装 Node 依赖、运行开发脚本。适用于想要获取 GitHubNode.js 项目的用户。
快速定位方法:
- 从
composer install -vvv日志里找到实际尝试的git clone https://...地址 - 用
curl -I -L https://your-git-server.com/user/repo.git看最终 HTTP 状态码和Content-Type - 如果返回
text/html或状态码是200(不是401),基本可断定是服务端跳转陷阱 - 解决:换用 SSH 地址,或联系运维关闭匿名重定向,或在 Git 服务侧配置允许未认证读取 refs
Git全局user.name/user.email未设置,导致某些私有源拒绝推送或校验失败
虽然composer install本身不提交代码,但部分私有包构建流程(如 Magento 的post-install-cmd脚本)会内部调用git config --get user.name。如果返回空,脚本可能中断并表现为“安装失败”或“卡住”。
这不是 Composer 的硬性要求,但属于常见隐性依赖:
- 检查:
git config --global user.name和git config --global user.email是否有输出 - 补全(示例):
git config --global user.name "Your Name"、git config --global user.email "you@example.com" - 注意:不要用邮箱别名或带+号的 Gmail 地址(如
you+work@gmail.com),某些 Git 服务校验严格 - CI/CD 环境尤其容易漏掉这步,Docker 镜像里默认不设这些
真正麻烦的不是报错本身,而是它常混在长日志里一闪而过;最易被忽略的是凭据管理器残留和 HTTPS 重定向这两个点,它们不报具体错误码,只让整个流程静默卡死或循环失败。

















