我正在构建一个 pre-receive 钩子,用于检查作者的名称和电子邮件地址。
我可以轻松地使用以下方法检查提交的名称/电子邮件地址:
while read oldsha newsha refname; do
authorEmail=$(git log -1 --pretty=format:%ae $newsha)
if [[ $(grep -w $authorEmail ~/.ssh/authorized_keys | wc -w) -gt 1 ]]; then
echo "Author Email: $authorEmail"
exit 0
else
echo "Unauthorized Email"
exit 1
fi
done
但是我不想简单地拒绝它,我希望用正确的电子邮件地址替换掉这个邮件。 我的authorized_keys设置如下:
environment="UserEmail=user@hostA" ssh-rsa AAAAAA... user@hostA
我想做一些类似于以下的事情:
if [[ ... ]];
then
echo "Author Email: $authorEmail"
exit 0
else
echo "Unauthorized Email detected"
echo "Replacing email with: $UserEmail"
git commit --amend --author "something <$UserEmail>"
exit 0
fi
但如预期所料,git commit --amend .. 会抛出一个错误,指出它应该在工作树中使用。是否有任何方法可以在这里在pre-receive或可能的update钩子中完成此操作?