我们使用 git 来跟踪/etc/
我们服务器上的变化。
管理员在更改 /etc/ 中的文件时以 root 身份工作,因此他们的提交具有作者
root <root@machinename>
这不太令人满意,因为您无法看到哪个管理员实际进行了更改。
我们该怎么做才能在 git 日志中获取真正的管理员名称?我认为保留存储库的本地克隆是不可行的,因为我们经常交互更改直到某些操作成功,而更改-提交-推送-查看错误-重复循环在这里无济于事。
答案1
git 作者和提交者姓名会受到环境变量、GIT_COMMITTER_NAME
和的影响。GIT_COMMITTER_EMAIL
GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
现在的技巧是通过 SSH 连接时将这些变量提交到远程服务器:
定义并导出文件中的变量
~/.bashrc
:export GIT_AUTHOR_NAME="Christian Weiske"
通过调整以下内容,使用 SSH 连接自动发送它们
~/.ssh/config
:SendEnv LANG LC_* GIT_*
LANG
并且LC_*
不是必需的,但是 Debian 在其默认 ssh_config 中有它们,所以我认为我也应该提交它们在远程服务器上,调整sshd配置以
/etc/ssh/sshd_config
接受GIT_*
环境变量:AcceptEnv LANG LC_* GIT_*
瞧瞧——git commit
以 root 身份登录/etc/
会导致:
commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <[email protected]>
如果将来某个时间 serverfault 出现故障:http://cweiske.de/tagebuch/carry-git-settings.htm
答案2
首先,与你的问题无关,我想敦促你紧急停止使用root
登录和,su
而是使用用户登录和sudo
。限制您的root
登录仅限于控制台,甚至不限制。
也就是说,git commit
有一个--author
选项可以帮助你:
# git commit --author='Author Name <[email protected]>' -a
您还可以谨慎地使用每个用户的环境变量来设置GIT_AUTHOR_NAME
变量GIT_AUTHOR_EMAIL
。在日志中,它将显示不同的作者和相同的提交者(root@host
),但它将为您提供更多的审计。当然,这意味着您相信您的管理员会保持变量的完整性。由于每个人都在使用特定的 shell,他们可以使用sudo
特定的变量来 root 和 source 文件git
,在提交时以不同的方式识别每个变量。不是很实用,但您甚至可以使用脚本自动执行此操作。
编辑:当然,@ScottPack 提出的更好的方法是使用像 Puppet 或 Chef 这样的配置管理系统,并使用 git 来跟踪中央服务器上的更改而不是真实服务器上的更改,以便每个管理员都可以拥有配置的工作副本。
答案3
和油灰您可以在“连接->数据->环境变量”下进行设置。
它们也出现在“ su
”之后以至根。
答案4
如果您正在使用sudo
并且您的非root用户已经挂载了他们的主目录:
git -c include.path=<file>
将包括配置<file>
。
为了自动提取非 root 用户的配置文件,我使用别名bash
:
alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""
然后我使用gsudo
而不是git
两者:
- 以 root 身份运行
- 有权访问所有非root用户的git配置
检查配置确实被导入:
gsudo config --list --show-origin --includes | less