如何在Gerrit 2.16

时间:2018-01-19 22:29:49

标签: git gerrit gerrit-trigger

我已经开始使用Gerrit 2.16作为代码审查工具,并希望配置服务器端挂钩,以便在将更改提交/推送到gerrit时验证git commit消息。

通过将脚本复制到$ GIT_DIR / hooks(ref-update,patchset-created,change-merged等脚本)来尝试使用钩子,在gerrit服务器上给予了许可,但没有任何作用。

可以使用gerrit UI中的命令

在本地存储库上启用commit-msg挂钩

例如: git clone ssh:// @:29418 / Project1&& scp -p -P 29418 @:hooks / commit-msg /.git/hooks /

如果启用此挂钩,

将自动生成change_ID。

执行上述命令时,此脚本commit-msg将下载到本地存储库 我的问题;我们可以在gerrit服务器上找到这个脚本的路径,以便我可以修改和强制执行git commit消息验证吗?

或者还有其他方法可以启用gerrit服务器端钩子吗?

3 个答案:

答案 0 :(得分:3)

不,你不会在Gerrit服务器上找到commit-msg路径,Git / Gerrit不会自动使用你放在$ GIT_DIR / hooks上的任何钩子。如果要使用本地挂钩,则需要在REPOSITORY / .git / hooks本地目录中手动安装它们。

Gerrit不会在它使用的存储库中运行任何标准的git钩子,但它确实通过Hooks plugin包含了自己的钩子机制。请参阅here有关受支持的Gerrit挂钩的更多信息。 Hooks插件是core plugin(它包含在Gerrit war文件中,可以在Gerrit初始化期间轻松安装)。

我建议你看一下Git::Hooks(用于实现Git / Gerrit钩子的Perl框架)。我们在我们公司使用它真的很棒。你可以用它来实现你想要的东西......还有更多......

答案 1 :(得分:0)

#!/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

答案 2 :(得分:0)

#!/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