我正在运行一个
gitlab git服务器.
我的大多数用户都运行3个版本的git中的1个.
git 1.7.1(centos用户)
git 1.7.9(其他人)
git 1.8.4(mac用户)
一些用户不小心提交并以root用户身份推送代码.我需要阻止这些用户的提交.
我的预提交钩子看起来像这样:
#!/bin/bash
if [[ $GIT_AUTHOR_NAME == 'root' ]]
then
echo "If you commit as root, you're gonna have a bad time";
echo "Set 'git config user.name' and try again";
exit 1;
fi
这适用于1.7.9和1.8.x但不是1.7.1的预提交挂钩
根据this blog,预接收和接收后挂钩没有我正在寻找的任何环境变量(GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL,GIT_AUTHOR_DATE,GIT_COMMITTER_NAME,GIT_COMMITTER_EMAIL,GIT_COMMITTER_DATE,EMAIL).
有没有办法修改这个预提交钩子来阻止旧版本的git上的root用户?
http://longair.net/blog/2011/04/09/missing-git-hooks-documentation/
最佳答案 为什么不将检查放在预接收挂钩中,即,当代码即将提交到中央git存储库/服务器时,在服务器端进行验证.
#Extract commiter names here.
commiters=$(git log --pretty=format:"%cn" $revs) #This should work in all git versions
printf "$commiters\n" | while read name; do
if [[ $name == "root" ]]; then
echo "You are commiting as root user which I don't like. Reveal your identity!"
exit 1
fi
done