[英]How to configure server side hooks in Gerrit 2.16
我已經開始使用Gerrit 2.16作為代碼查看工具,並希望配置服務器端掛鈎以在將更改提交/推送到gerrit時驗證git commit消息。
通過使用鈎子嘗試將腳本復制到$ GIT_DIR / hooks(例如ref-update,patchset創建的,更改合並的腳本),在gerrit服務器上授予了權限,但沒有任何效果。
可以通過使用gerrit UI中的命令Give在本地存儲庫上啟用commit-msg掛鈎
例如:git clone ssh:// @:29418 / Project1 && scp -p -P 29418 @:hooks / commit-msg /.git/hooks/
如果啟用此掛鈎,將自動生成change_ID。
執行上述命令后,該腳本commit-msg將下載到本地存儲庫。
我的問題; 我們可以在gerrit服務器上找到此腳本的路徑,以便我可以修改和強制執行git commit消息驗證嗎?
還是有其他方法啟用gerrit服務器端掛鈎?
不,您不會在Gerrit服務器上找到commit-msg路徑,並且Git / Gerrit不會自動使用您放在$ GIT_DIR / hooks上的任何鈎子。 如果要使用本地掛鈎,則需要在REPOSITORY / .git / hooks本地目錄中手動安裝它們。
Gerrit不在與它一起使用的存儲庫中運行任何標准git鈎子,但通過Hooks插件包含了自己的鈎子機制。 請參閱此處有關受支持的Gerrit掛鈎的更多信息。 Hooks插件是一個核心插件 (包裝在Gerrit war文件中,可以在Gerrit初始化期間輕松安裝)。
我建議您看一下Git :: Hooks (用於實現Git / Gerrit鈎子的Perl框架)。 我們在公司使用,這真的很棒。 您可以使用它來實現所需的功能以及更多...
#!/bin/bash
echo "Executing hook from Gerrit_DIR "
bold=$(tput bold)
normal=$(tput sgr0)
RED='\033[0;31m'
NC='\033[0m' # No Color
GIT_DIR="/opt/gerrit/site/git"
PROJECT=$2
REFNAME=$4
UPLOADER=$6
OLDREV=$8
NEWREV="${10}"
BASE="<baseDir>"
RepoDir="$GIT_DIR/$PROJECT.git"
echo $RepoDir
echo $PROJECT
echo $8
echo ${10}
# execute the project specific hook
if [ -f "$RepoDir/hooks/commit-received" ]
then
echo "Executing the project specific hook"
$RepoDir/hooks/commit-received $RepoDir ${10}
else
echo "There is no project specific hook"
fi
#!/bin/bash
echo "Executing hook for patchset"
bold=$(tput bold)
normal=$(tput sgr0)
RED='\033[0;31m'
NC='\033[0m' # No Color
RepoDir=$1
NEWREV=$2
MSG=$(git --git-dir=$RepoDir log --format=%B -n 1 $NEWREV | awk -F"Change-Id:" '{print $1}')
Val=`echo $MSG | cut -c1-3`
if [ $Val == "TR_" ] || [ $Val == "CR_" ] || [ $Val == "PU_" ] || [ $Val == "FR_" ] || [ $Val == "CSR" ]
then
echo "The commit message is valid"
exit 0
else
echo -e "The commit message ${RED}\"$MSG\"${NC} is not valid, please enter a valid commit message"
exit 1
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.