我们使用git来跟踪/etc/在我们的服务器上的变化。
在更改/ etc /中的文件时,pipe理员以root身份工作,因此他们的提交具有作者
root <root@machinename>
这不是很令人满意,因为你无法看到哪个pipe理员真的做了这个改变。
我们可以做什么来获得真正的pipe理员名称在git日志? 我不认为保存本地的版本库是可行的,因为我们经常会直接更改,直到某些工作成功,而改变 – 提交 – 推送 – 查看 – 错误 – 重复循环在这里没有帮助。
git作者和提交者名称可能会受到环境variablesGIT_COMMITTER_NAME , GIT_COMMITTER_EMAIL , GIT_AUTHOR_NAME和GIT_AUTHOR_EMAIL 。
现在诀窍是通过SSH连接时将这些variables提交给远程服务器:
在~/.bashrc文件中定义并导出variables:
export GIT_AUTHOR_NAME="Christian Weiske"
通过调整~/.ssh/config自动发送SSH连接:
SendEnv LANG LC_* GIT_*
LANG和LC_*不是必须的,但Debian已经在默认的ssh_config中,所以我想我也应该提交它们
在远程服务器上,调整/etc/ssh/sshd_config的sshdconfiguration以接受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_NAME和GIT_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了解有关该命令的更多信息,以及可以使用它的很酷的东西。