Gitlab 进行 CR 的强限制,原理很简单。
实现起来,利用的是 git 自身的 custom_hooks 的支持,以及需要对 gitlab 做一点操作,对它的数据库开放一个只读权限的账号,来处理。
git的custom_hooks 分为三类:
pre-receive
post-receive
update
如果要限制 merge 到 master 分支,可以在 pre-ceive上做文章:
增加脚本。
对语言的支持也非常广泛,SHELL, Ruby, Python, 在我的理解中,只要是脚本语言,都会支持得很好。
原理参考 gitlab 的官方文档,对 hook 的执行顺序有详尽介绍:
https://docs.gitlab.com/ce/administration/custom_hooks.html