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

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

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

 root <root@machinename> 

这不是很令人满意,因为你无法看到哪个pipe理员真的做了这个改变。

我们可以做什么来获得真正的pipe理员名称在git日志? 我不认为保存本地的版本库是可行的,因为我们经常会直接更改,直到某些工作成功,而改变 – 提交 – 推送 – 查看 – 错误 – 重复循环在这里没有帮助。

git作者和提交者名称可能会受到环境variablesGIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL

现在诀窍是通过SSH连接时将这些variables提交给远程服务器:

  1. ~/.bashrc文件中定义并导出variables:

     export GIT_AUTHOR_NAME="Christian Weiske" 
  2. 通过调整~/.ssh/config自动发送SSH连接:

     SendEnv LANG LC_* GIT_* 

    LANGLC_*不是必须的,但Debian已经在默认的ssh_config中,所以我想我也应该提交它们

  3. 在远程服务器上,调整/etc/ssh/sshd_configsshdconfiguration以接受GIT_*环境variables:

     AcceptEnv LANG LC_* GIT_* 

瞧 – 在/etc/ git commit作为根目录:导致:

 commit 8a4654f13241f05361283a88ce041a0fc24b8ac6 Author: Christian Weiske <[email protected]> 

如果服务器故障将来会出现一些故障: http : //cweiske.de/tagebuch/carry-git-settings.htm

首先,与您的问题无关,我会敦促您紧急停止使用rootlogin和su并使用用户login和sudo来代替。 只限制你的rootlogin到控制台,甚至没有。

也就是说, git commit有一个--author选项可以帮助你:

 # git commit --author='Author Name <[email protected]>' -a 

您还可以谨慎使用每个用户的环境variables来设置GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILvariables。 在日志中,它会显示不同的作者和相同的提交者( root@host ),但它会给你更多的审计。 当然,这意味着你相信你的pipe理员保持variables不变。 由于每个人都使用一个特定的shell,他们可以sudo根源,并使用他们特定的gitvariables来源文件,在提交时识别每个文件。 不是很实用,但你甚至可以用脚本自动化。

编辑:当然由@ScottPack指定一个更好的方法是使用像木偶或厨师configurationpipe理系统,并使用git来跟踪中央服务器上的变化,而不是真正的服务器上,所以每个pipe理员可以有一个工作副本的configuration。

用腻子你可以在“连接 – >数据 – >环境variables”下设置。

他们也是在“ su ”之后出现的。

如果您碰巧在您的服务器上使用ssh密钥来configuration用户帐户,则可以在安装时将环境variables实际附加到授权密钥上 – 例如在〜bob / .ssh / authorized_keys

 environment="GIT_AUTHOR_NAME=Bob Smith",environment="[email protected]" ssh-rsa AAAA.... [email protected] 

这样,当用户在他们的SSH自动拥有这些envs设置 – 没有必要从他们转发他们从本地客户端。 奖励点数,如果你已经有这个信息,并从configurationpipe理系统生成authorized_keysconfiguration。

注意:以上要求sshd_config中的PermitUserEnvironment yes

除了coredump的答案之外,你还可以在.git/config文件中将这些选项设置在版本库的工作副本中(手动或使用git config命令。

请参阅man git-config了解有关该命令的更多信息,以及可以使用它的很酷的东西。