将/etc/nixos/configuration.nix托管到GitHub时的Git提交问题
普通目录的Git操作流程
在普通用户目录(如~/testGit)中,以下Git流程可正常运行:
git init git add . git commit -m "first commit"
/etc/nixos目录的特殊操作要求
在/etc/nixos目录下执行Git操作前,必须先执行以下命令添加安全目录例外:
git config --global --add safe.directory /etc/nixos
否则会收到错误提示:
fatal: detected dubious ownership in repository at '/etc/nixos'
To add an exception for this directory, call:git config --global --add safe.directory /etc/nixos
提交时遇到的身份验证错误
使用sudo执行前两条命令(sudo git init、sudo git add .)可成功,但执行sudo git commit -m "first commit"时会失败,错误信息如下:
Author identity unknown
*** Please tell me who you are.
Rungit 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 'root@nixos.(none)')
即便已经为普通用户配置了全局Git身份:
git config --global user.email "myemail@example.com" git config --global user.name "MY Name"
问题依然存在,环境为VirtualBox上运行的NixOS系统。
解决方法
出现这个问题的核心原因是:sudo执行Git命令时会切换到root用户身份,而root用户的Git配置与普通用户相互独立,普通用户的全局配置不会被root读取。
方法1:为root用户配置全局Git身份
直接给root用户设置全局身份信息,执行以下命令:
sudo git config --global user.email "myemail@example.com" sudo git config --global user.name "MY Name"
之后再用sudo git commit即可正常执行。
方法2:在当前仓库本地配置身份
如果不想给root用户设置全局配置,可以仅在/etc/nixos仓库中配置身份:
sudo git config user.email "myemail@example.com" sudo git config user.name "MY Name"
该配置仅对当前仓库生效,不会影响root用户的其他Git操作。
方法3:让sudo继承普通用户的环境(可选)
使用sudo -E参数保留普通用户的环境变量,这样Git会读取普通用户的全局配置:
sudo -E git commit -m "first commit"
注意:此方式会继承普通用户的所有环境变量,存在一定安全风险,需谨慎使用。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

