如何解决Git报错Please tell me who you are?

文章导读
遇到 Please tell me who you are 这个报错时,第一步不是急着执行 git config,而是先确认 Git 到底从哪里读取身份信息。因为这个问题通常不是“没配置”,而是“配置没生效”或者“配置被更高优先级的值遮挡”。如果直接按报错提示复制两条命令,可能只是临时把当前仓库救回来,换一个项目又会撞上同样的提示。
📋 目录
  1. A 先分清是哪个层级的配置缺失
  2. B 只改当前仓库:副作用最小的止血方式
  3. C 全局配置:适合多数个人开发环境
  4. D 改完之后看这几个信号
A A

遇到 Please tell me who you are 这个报错时,第一步不是急着执行 git config,而是先确认 Git 到底从哪里读取身份信息。因为这个问题通常不是“没配置”,而是“配置没生效”或者“配置被更高优先级的值遮挡”。如果直接按报错提示复制两条命令,可能只是临时把当前仓库救回来,换一个项目又会撞上同样的提示。

先分清是哪个层级的配置缺失

当Git在提交时提示Please tell me who you are,通常是因为当前仓库、全局配置乃至环境变量中都没有可用的user.name和user.email信息。Git需要这些信息来标识提交作者,缺了就会直接中断提交,并给出两行示例命令。可以先运行git config --list --show-origin查看当前生效的配置来源,确认是没有任何配置,还是某个配置被意外清空。这条命令会同时显示系统、全局、仓库三级配置的来源文件,便于定位问题到底发生在哪一层。多数情况下,问题会出在全局用户配置缺失,也就是~/.gitconfig不存在或没有写入用户信息。

执行 git config --list --show-origin 后,注意看输出里的文件路径。常见的输出片段类似:

file:/etc/gitconfig      user.email=admin@example.com
file:/home/you/.gitconfig  user.name=Your Name
file:.git/config          user.email=you@example.com

如果只看到 file:/etc/gitconfig 这类系统级配置,而全局和仓库层都没有 user 信息,说明写配置时写错了层级。如果看到全局配置里有一对 user.nameuser.email,但提交仍然报错,那就需要检查环境变量是否盖过了配置文件。

如何解决Git报错Please tell me who you are?

只改当前仓库:副作用最小的止血方式

如果只想让当前仓库立即通过提交检查,可以在仓库目录内执行git config user.name "Your Name"和git config user.email "you@example.com"。这样会把身份信息写入当前仓库的.git/config中,仅对该仓库生效,不会影响其他项目。相比设置全局身份,这种方式的副作用更小,尤其适合需要在不同项目中使用不同身份的场景。需要注意,仓库级配置会覆盖全局配置,但会被环境变量覆盖。若设置了GIT_AUTHOR_NAME或GIT_COMMITTER_NAME等环境变量,命令行设置的仓库级配置未必能取代它们,提交时仍可能读取环境变量里的身份。

判断是否被环境变量干扰,可以运行 env | grep GIT_。如果输出里出现 GIT_AUTHOR_NAMEGIT_COMMITTER_EMAIL 这类变量,并且值不是你想用的那个身份,就需要在当前 shell 里先清理它们,再执行提交。清理方式取决于变量来源,可以用 unset GIT_AUTHOR_NAME 临时移除,也可以检查 ~/.bashrc~/.zshrc 或系统 profile 文件里是否有 export 语句。这类环境变量更适合在 CI 脚本中临时注入,手动开发时留着反而容易造成“明明配置了却还是报错”的假象。

全局配置:适合多数个人开发环境

如果你希望所有仓库默认使用同一个身份,可以执行git config --global user.name "Your Name"和git config --global user.email "you@example.com"。这两条命令会写入~/.gitconfig文件,之后新建的仓库或未设置仓库级身份的已有仓库都会自动读取这套配置。设置前建议先运行git config --global --list确认当前是否已有全局配置,避免覆盖掉曾经写好的用户名或邮箱。一个容易被忽略的坑是,全局配置的邮箱如果和代码托管平台账户邮箱不一致,提交记录仍然能成功生成,但平台不会识别为你的贡献,头像和贡献图可能无法关联。

如何解决Git报错Please tell me who you are?

这里有一个需要格外注意的边界:--global 只对当前操作系统用户生效。如果你在服务器上使用 sudo git commit,实际提交者变成 root 用户,读取的是 /root/.gitconfig,而不是你当前用户的配置。日常开发中不建议用 sudo git 执行提交,如果已经这么操作过,需要检查仓库目录的所有者,并修正文件权限。

改完之后看这几个信号

配置完成后的验证不能只看 git config user.name 输出正确,要直接看提交记录里的作者字段。建议先执行 git log -1 --format='%an <%ae>',观察最近一次提交的作者名和邮箱。如果显示的还是旧值或错误值,说明配置没有生效,需要回到来源检查流程,确认是否存在环境变量覆盖或仓库级配置残留。

如何解决Git报错Please tell me who you are?

另一个验证信号是报错是否消失。完成配置后,重新执行 git commit,如果仍然出现 Please tell me who you are,说明当前生效的配置来源里仍然缺少 user.name 和 user.email。这时可以按优先级顺序检查:环境变量、仓库级配置、全局配置、系统配置。使用 git config --show-origin --get user.name 可以只看 user.name 这一个键的来源,输出里会带文件路径,比看整份列表更直接。

还有一类情况容易被误判为“配置没生效”:仓库里的 .git/config 文件属于 root 用户,普通用户没有写权限。此时执行 git config user.name 不会报权限错误,但写入会失败,配置值不会变化。可以用 ls -l .git/config 查看文件所有者,如果显示的是 root,则需要用 sudo chown 修改所有者,或调整目录权限后再执行配置。

最后建议保存一个习惯:新克隆的仓库第一次提交前,先运行 git config user.namegit config user.email 确认输出符合预期。这两条命令不会修改任何配置,只是把当前生效值打印出来。如果输出为空,就说明在当前环境里还没有可用的身份信息,提前补上比等到提交报错再处理要省事得多。