我运行的是gitlab git服务器。
我的大多数用户都在运行git的3个版本中的1个。
git 1.7.1 (centos用户)
git 1.7.9 (其他所有人)
git 1.8.4 (mac用户)
一些用户意外地以root用户的身份提交和推送代码。我需要阻止来自这些用户的提交。
我的pre-commit钩子如下所示:
#!/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/
发布于 2014-03-19 09:01:02
为什么不把检查放在一个预接收钩子中,也就是,当代码将要提交到中央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发布于 2014-03-19 08:01:20
例如,设置gitolite (应该有适用于您的服务器系统的包),并将其配置为只有经过批准的用户才能推送。如果他们切换到root,凭据将不匹配,推送将被拒绝。它使您可以详细控制每个分支都有权访问的分支。
发布于 2014-03-19 16:35:28
您可以鼓励您的用户使用他们这边的pre-commit钩子作为缓解措施,但最终您必须拒绝服务器端的推送,才能完全实施该策略。
您可以做的一件事是使用一个更新钩子,它将拒绝root作者提交的推送。将此代码添加到您的.git/hooks/update
git log --format="%h %an" ${2}..${3} | while read COMMIT_HASH COMMIT_AUTHOR; do
if [ "$COMMIT_AUTHOR" = "root" ]; then
echo "Updating ${1} by root is not allowed, offending commit: $COMMIT_HASH"
exit 1
fi
done代码片段将解析正在推送的旧修订和新修订之间的所有提交,如果这些提交中的任何一个具有作者的root权限,则将拒绝推送。另外,要确保钩子是可执行的!
https://stackoverflow.com/questions/22491942
复制相似问题