在phabricator上實現強制code review有兩種方式,一種是將倉庫托管在phabricator上,通過herald的方式來進行,具體的實現方式可以參考 《phabricator - host repository模式下強制code review設置》;另一種是在代碼托管服務器上增加hook來實現。本文主要對第二種方式進行講解。
因為我們公司的代碼目前用自己搭建的Gitlab管理,所以這里以Gitlab為例子
- 需要在Gitlab服務器上,對應的倉庫目錄下新建一個
custom_hooks
文件夾(倉庫目錄不是clone到本地的目錄,是Gitlab服務器上的,最原始的) - 在文件夾中新建一個文件,名字為
pre-receive
- 修改文件的讀寫權限
chmod 755 pre-receive
- 修改文件的屬主
chown git:git pre-receive
- 在
pre-receive
文件中加入對應的檢查邏輯即可
腳本的思路就是取出本次提交的Revision信息,遍歷commit message ,檢查是否包含字符串 Reviewed By,包含的話則此次push提交成功,否則push失敗。
另外,一開始有一個疑問,code review通過后如果改變本地的commit message,查了一些資料,發現arc amend
能夠將phabricator服務器上的review信息同步到本地,在commit message中增加Reviewed By等內容。
參考資料: