在 git 存储库中跟踪 /etc/ 并以 root 身份提交时更正用户名

在 git 存储库中跟踪 /etc/ 并以 root 身份提交时更正用户名

我们使用 git 来跟踪/etc/我们服务器上的变化。

管理员在更改 /etc/ 中的文件时以 root 身份工作,因此他们的提交具有作者

root <root@machinename>

这不太令人满意,因为您无法看到哪个管理员实际进行了更改。

我们该怎么做才能在 git 日志中获取真正的管理员名称?我认为保留存储库的本地克隆是不可行的,因为我们经常交互更改直到某些操作成功,而更改-提交-推送-查看错误-重复循环在这里无济于事。

答案1

git 作者和提交者姓名会受到环境变量、GIT_COMMITTER_NAME和的影响。GIT_COMMITTER_EMAILGIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL

现在的技巧是通过 SSH 连接时将这些变量提交到远程服务器:

  1. 定义并导出文件中的变量~/.bashrc

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. 通过调整以下内容,使用 SSH 连接自动发送它们~/.ssh/config

    SendEnv LANG LC_* GIT_*
    

    LANG并且LC_*不是必需的,但是 Debian 在其默认 ssh_config 中有它们,所以我认为我也应该提交它们

  3. 在远程服务器上,调整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

相关内容