Git identity unknown 错误源于 Git 未配置 user.name 和 user.email,尤其在 CI/CD 或 Docker 中;需用 git config --global(或 --system)显式设置,且确保配置文件可写,与认证问题无关。

Composer 拉取私有 Git 库时提示 git identity unknown,本质不是 Composer 的问题,而是 Git 在执行克隆或拉取时无法识别当前用户身份(user.name 和 user.email 未设置),尤其在 CI/CD 环境、Docker 容器或无交互 shell 中高频出现。
Git 全局 user.name 和 user.email 必须显式配置
Composer 调用 git clone 时会继承系统 Git 配置。若 Git 未设 identity,某些 Git 版本(尤其是 2.30+)会在非交互环境下直接报错,中断 Composer 安装流程。
- 运行
git config --global user.name "your-name"和git config --global user.email "your-email@example.com" - 验证是否生效:
git config --global --get user.name和git config --global --get user.email应返回非空值 - 注意:仅设置 local 配置(即去掉
--global)无效,因为 Composer 启动的是新 Git 进程,不读取项目级 .git/config
CI/CD 或 Docker 中需在构建阶段提前写入 Git 配置
在 GitHub Actions、GitLab CI 或自建 Jenkins 中,环境默认无 Git identity,且容器常以 root 或无 home 目录用户运行,--global 配置可能写入失败或被忽略。
- 确保 Git 配置写入位置可写:例如在 Dockerfile 中使用
git config --system(需 root 权限)或为当前用户创建$HOME/.gitconfig - GitHub Actions 示例(在
steps中):git config --global user.name 'ci-bot' git config --global user.email 'ci@localhost'
- 若使用非 root 用户(如
www-data),先su -s /bin/sh www-data -c "git config --global ...",否则配置会写到 root 的 home 下
私有库认证与 identity 是两件事,别混淆
git identity unknown 错误和「认证失败」(如 Permission denied (publickey))无关。前者是 Git 元信息缺失,后者才是权限问题。即使你已配好 SSH key 或 HTTPS token,仍可能因 identity 缺失而卡住。
- 确认私有库访问正常:手动运行
git ls-remote git@github.com:your-org/private-repo.git HEAD或git ls-remote https://token:x-oauth-basic@github.com/your-org/private-repo.git HEAD - 如果手动命令成功但 Composer 失败,99% 是 identity 问题;如果手动也失败,再排查 SSH key、PAT、composer.json 中的
repositories类型(vcsvspackage)或dist配置 - Composer 本身不校验 identity,它只是调用 Git —— 所以所有修复动作都在 Git 层
最容易被忽略的是:某些 Alpine Linux 基础镜像中,Git 默认不带 git config 的全局写入能力(因缺少 /etc/gitconfig 写权限),必须显式指定 --file /etc/gitconfig 或改用 --system,否则配置看似执行成功,实际未落盘。










