如何在服务器端git hook中获取推送用户信息?

时间:2016-03-01 09:01:00

标签: git githooks

我想通过使用服务器端挂钩(更新挂钩)来阻止用户删除远程git分支。

我已经在update hook中编写了shell脚本来实现这一点 现在我可以阻止所有用户删除远程git分支,但我想给特定用户授予删除权限,为此我们需要获取用户信息(用户名) ,useremail)谁在服务器端钩子中尝试删除操作?

我们有 $USER, $GIT_AUTHOR_NAME, $GIT_AUTHOR_EMAIL 等变量来获取客户端挂钩中的用户信息,但它们在服务器端挂钩中没用。

我们是否有其他选项可以在服务器端挂钩中获取用户信息?

3 个答案:

答案 0 :(得分:4)

<强> SELECT TIMEDIFF(last_time, cast( now() as time)) as diff

请记住,每个人都可以在提交中伪造电子邮件:

Sample hook code

要避免它访问您的中央存档文档并阅读回合用户权限(在每个服务器之间有所不同),并从那里提取有关如何获取用户详细信息的信息。

git commit -c user.name ... -c user.email ...

答案 1 :(得分:1)

我在这里得到了解决方案。

https://github.com/jakubgarfield/Bonobo-Git-Server/issues/494

我们使用bonobo git服务器作为版本控制。

答案 2 :(得分:0)

在服务器端,您可以获取正在尝试用/usr/bin/php /home/user/public_html/'the subdomain name'/cron.php 推送的commit

也就是说,它具有HEADER,可为您提供此类信息。可能是错误的或我被篡改了,但这在服务器端可用。

类似的事情会做。在下面的代码中,请注意三个相关变量: $ CATAUTHOREMAIL $ CATAUTHOR $ CATEMAIL

git cat-file commit SHA

这非常有用。我写这个答案的灵感来自@codewizard,因为那里仅适用于客户端,而不适用于服务器端。而且我需要服务器端的“东西”。它不是万无一失的,但是非常有用。

  • 如果您分析提交标头,则可以获取更多信息;例如,您还具有不一定是提交作者的“提交者名称”。

  • 上面代码中的循环将在所有提交上迭代。您可能只想获取最后(最近)提交的作者,就像代码与该# --- Command line arguments refname="$1" oldrev="$2" newrev="$3" echo echo '*** Checking your push update...' MISSREVS=`git rev-list ${oldrev}..${newrev}` CATAUTHOREMAIL="" CMTMSG="" for RV in ${MISSREVS} ; do if [ -z "$CATAUTHOREMAIL" ] ; then CATAUTHOREMAIL=`git cat-file commit ${RV} | grep author` fi CMTMSG="$CMTMSG "`git cat-file commit ${RV} | sed '1,/^$/d'` done REMSG="author (.*) <" [[ $CATAUTHOREMAIL =~ $REMSG ]] CATAUTHOR="${BASH_REMATCH[1]}" REMSG="author.*<(.*)>.*" [[ $CATAUTHOREMAIL =~ $REMSG ]] CATEMAIL="${BASH_REMATCH[1]}" echo "*** Last commit author = $CATAUTHOR" echo "*** Last commit email = $CATEMAIL" 一样,或者您可能想要将所有它们保存在数组或其他内容中。您可以根据自己的需要更改此模板。

  • 我使用了if [ -z "$CATAUTHOREMAIL ],但是如果在非常提交的消息中出现 author 一词,它就会中断...因此,您可能希望找到一个更好的过滤器,例如,将标题与提交主体分开;即第一行空白。