git hook 服务端规范提交邮箱

背景:

       最近项目中需要统计代码的提交量,但是由于提交代码使用的邮箱多种多样,为了规范邮箱与公司邮箱一致,采用git hook来规范提交时使用的邮箱

选型:

      查看git官方文档(https://www.git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90hook介绍可以直接跳转),发现hook可以分为客户端和服务端,使用客户端方式实现,由于人员众多,不可能每个人都要配置,这样有的人也不一定配置。果断选择服务端配置。这里简单介绍下服务端钩子

pre-receive

处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。 它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受。 你可以用这个钩子阻止对引用进行非快进(non-fast-forward)的更新,或者对该推送所修改的所有引用和文件进行访问控制。

update

update 脚本和 pre-receive 脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次。 假如推送者同时向多个分支推送内容,pre-receive 只运行一次,相比之下 update 则会为每一个被推送的分支各运行一次。 它不会从标准输入读取内容,而是接受三个参数:引用的名字(分支),推送前的引用指向的内容的 SHA-1 值,以及用户准备推送的内容的 SHA-1 值。 如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。

post-receive

post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。 它接受与 pre-receive 相同的标准输入数据。 它的用途包括给某个邮件列表发信,通知持续集成(continous integration)的服务器, 或者更新问题追踪系统(ticket-tracking system) —— 甚至可以通过分析提交信息来决定某个问题(ticket)是否应该被开启,修改或者关闭。 该脚本无法终止推送进程,不过客户端在它结束运行之前将保持连接状态, 所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。

实现:

       1、创建custom_hooks自定义hook

             默认服务端的钩子目录在/opt/gitlab/embedded/service/gitlab-shell/hook

             a、自定义hook可在/opt/gitlab/embedded/service/gitlab-shell目录下创建custom_hooks目录

             b、在custom_hooks目录下创建 pre-receive.d 、update.d、post-receive.d三个目录分别存在的文件队对应前面提到的三种钩子

如:

           c、编写receive脚本校验提交代码时使用的邮箱格式


#!/bin/sh
  
read  new ref
log=$(git log -1 $ref )
em=${log#*<}
email=${em%>*}
temp=${log#*@}
email_suffix=${temp%>*}
if [ ${email_suffix} != 'qq.com' ];then
echo 'you commit code use email is: "'$email '" the suffix of this email  is :'${email_suffix}'
Email format error: "'$email'" is not  formal qq OA email
can not commit your code , unless follow these steps to modify your email to OA email

steps:1. git config --global  --replace-all user.email xxx@qq.com
      2.  git commit --amend --author "xxx <xxx@qq.com>" 
         (modify author email to OA email(xxx@qq.com) in your commit infos )
      3. :wq
 

attention: if your commit code use email is different from your OA email (xxx@qq.com) ,your code will not statistical'
exit 1
        else
echo 'your email is OA email'
exit 0
fi

      d、修改custom_hooks_dir路径


vi /etc/gitlab/gitlab.rb
gitlab_shell['custom_hooks_dir'] = /opt/gitlab/embedded/service/gitlab-shell/custom_hooks
sudo gitlab-ctl reconfigure 
gitlab-ctl restart//重启gitlab

  测试:

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值