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