为了防止人们使用“随机奇怪的帐户”进行提交,您可以设置一个 git pre-receive 挂钩来根据有效名称列表验证传入提交的提交者/作者姓名。但这不提供身份验证组件。
为防止冒充,您可以简单地要求所有提交都经过 gpg 签名 (git commit -S ...),并让您通过 pre-receive 挂钩根据服务器上的 gpg 密钥环验证签名。
根据人们连接到您的远程服务器的方式,您还可以将提交者/作者姓名与用于连接的用户名显式匹配(如果您有权访问)。
更新 1
如果您的提交者通过 ssh 推送到您的服务器,那么上面的第三个选项可能是最简单的。在您的.ssh/authorized_keys 文件中,为标识用户的每个键设置一个环境变量:
environment="SSH_USER=lars" ssh-rsa ...
然后在您的pre-receive 挂钩中,您可以使用该环境变量针对某个表查找有效的提交者名称/电子邮件。您可以在 githooks(5) 手册页中阅读有关 pre-receive 钩子的信息,它们在标准输入中收到以下形式的行:
<oldrev> <newrev> <refname>
您可以像这样从<newrev> 获取提交名称:
commiter_name=$(git show -s --format='format:%cn' <newrev>)
邮件使用%ce而不是%cn。
更新 2
或者见鬼,只是忘记表查找。在您的.ssh/authorized_keys 文件中:
environment="ALLOWED_NAME=Bob Jones",environment="ALLOWED_EMAIL=bob@example.com" ssh-rsa ...
然后在你的 pre-receive 钩子中:
#!/bin/sh
while read oldrev newrev refname; do
cn=$(git show -s --format='format:%cn' $newrev)
ce=$(git show -s --format='format:%ce' $newrev)
[ "$cn" = "$ALLOWED_NAME" ] || {
echo "*** Inalid committer name"
exit 1
}
[ "$ce" = "$ALLOWED_EMAIL" ] || {
echo "*** Inalid committer email"
exit 1
}
done
我认为你有你想要的。
更新 3
您可能可以使用 http 完成类似的操作
身份验证,因为在您的 pre-receive 脚本中,您会
可以访问REMOTE_USER 环境变量,其中包含
经过身份验证的远程用户的名称。你可能需要
进行某种表查找以获取已批准名称的值和
电子邮件地址。