我在ttyd下使用git commit -m 'xxx'命令时,出现了一个无法识别git用户信息的错误。

具体报错信息如下:

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'user@hostname.(none)')

意思就是git的用户身份认证信息未知,需要用git config --global进行配置。但我已经在系统中配置了git username&email,在本地终端中使用都正常,仅在ttyd中出现了这个bug。

那既然都提示要设置了,就先git config --global设置一下,这时又出现了第二个报错。

fatal: $HOME not set

到这里基本就明白错误原因了,ttyd下git无法识别$HOME环境变量,所以无法读取到~/.gitconfig文件内配置的username&email信息。

解决方案

根据这个报错搜了一下解决方案,根据【stackoverflow上的这个帖子】,解决方案就是用git config --system来设定git用户信息

git config --system user.email "you@example.com"
git config --system user.name "your name"

注意事项

这个方案只适合用在自己一个人使用的电脑主机/vps上,因为--system配置的git用户信息是全局生效的,如果系统是多用户使用,那所有用户都会使用同一个git配置。这点务必留意。应该还有其它更合理的解决方案,但我的主机只有自己一个人用,所以用的这个方案。😄

查阅【git官方文档】,可以知道--system参数是把配置信息写到/etc/gitconfig文件,也就是全局生效,而--global参数是把配置信息写到~/.gitconfig文件,只针对当前用户生效。所以当ttyd下git无法识别$HOME变量时,自然就无法读取到~/.gitconfig文件了。

update:如果这个git repo在本地只有自己一个人用,那可以直接在在repo目录下git config user.name/user.email,也就是这个仅针对这个repo配置用户信息。配置信息保存在这个repo的.git目录下,可以放心push,不会上传。

--system
For writing options: write to system-wide $(prefix)/etc/gitconfig rather than the repository .git/config.

--global
For writing options: write to global ~/.gitconfig file rather than the repository .git/config, write to $XDG_CONFIG_HOME/git/config file if this file exists and the ~/.gitconfig file doesn’t.