Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程
1、配置SSH key
i) 打开http://gerrit.baidu.com网页,使用邮箱(不加后缀)和密码登录

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

ii)打开设置页面-SSH Public Keys,添加SSH Public Key

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)
SSH Public Key的添加跟gitLab中key添加类似,可以参考!点击“add”按钮后会报504错误,点击continue刷新页面就添加成功了.

2、下载工程项目,projects→list,选择要下载的项目
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

3、下载提交代码的hook脚本
在仓库目录下执行命令:scp -p -P 29418 用户名@gerrit.baidu.com:hooks/commit-msg .git/hooks/ 注意替换红色部分的内容

执行成功的提示如下:
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

4、提交review的流程
修改完本地代码后执行

1)git add.

2)git commit

3)git push origin branchName:refs/for/branchName //注意替换红色部分的内容第一个位本地分支名,第二个位远端分支名;我们实行强制review机制,直接执行git push会报错

4)打开http://gerrit.baidu.com,到ALL→Open列表中找到刚才提交的codeReview,打开后添加reviewer

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

Open:等待review的提交 Merged:审核通过已经入库的提交记录 Abandoned:取消的review
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

添加其他人帮你review代码

为了简化3、4步骤,同时避免分支名字写错的情况,可以使用以下脚本:

review.sh

#bin/bash

git_prefix=".git"

install_commit_msg(){ 
if [ ! -f ".git/hooks/commit-msg" ]; then
echo "请输入用户名(不需要加后缀)"
read username
gitdir=$(git rev-parse --git-dir); 
scp -p -P 29418 ${username}@gerrit.baidu.com:hooks/commit-msg ${gitdir}/hooks/
if [ ! $? -eq 0 ]; then
echo "commit-msg下载错误"
exit 1
fi
fi
}

if [ ! -d "$git_prefix" ]; then
echo "! [Illegal git repository directory]"
echo " 移动脚本到git仓库根目录"
exit 1
fi

if [ ! -d ".git/hooks" ]; then
mkdir ".git/hooks"
echo "mkdir successfull"
fi

while getopts "m:c" arg
do
case $arg in
m)
echo "git commit -a -m ..."
install_commit_msg
git commit -a -m "$OPTARG"
;;
c)
echo "git commit -a --amend -C HEAD"
install_commit_msg
git commit -a --amend -C HEAD;
;;
esac
done

if [ -f ".git/HEAD" ]; then
head=$(< ".git/HEAD")
if [[ $head = ref:\ refs/heads/ ]]; then
git_branch="${head#
/*/}"
else
echo "无法获取当前分支"
exit 1
fi

else
echo "没有git中的HEAD文件"
exit 1
fi

reviewers=("zhao" "cui" "zhang" "sun" "wang" "gao")

echo "当前分支为:$git_branch"

pushUrl="HEAD:refs/for/$git_branch%"
for reviewer in ${reviewers[@]}; do

echo "reviewer人员为${reviewer}"    
pushUrl="${pushUrl}r=${reviewer},"

done
pushUrl="${pushUrl%,*}"
echo "pushUrl为:$pushUrl"
git push origin $pushUrl
if [ $? -eq 0 ]; then
exit 0
else
exit 1
fi

PS:1、修改脚本中的域名;2、修改成员:reviewers=("zhao" "cui" "zhang" "sun" "wang" "gao")

1)下载本脚本

2)添加到git工程项目目录下

3)修改脚本中62行,添加合适的reviewer

4)想要提交review时执行命令sh review.sh即可.

5、review别人代码
1)打开http://gerrit.baidu.com,到ALL→Open列表中找要review的提交

Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)
红框中时本次提交修改的文件,点击可查看详细的修改行数
选中有问题的代码块,点击弹出的×××小框“press C to comment”即可写出原因或改进意见,点击“Save”保存意见.
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

最后给本次提交打分,只有本次提交被+2之后才可以入库.
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)

-1说明代码有问题,需要提交者修改后自次提交,再次审核,直到+2,点击submit入库

6、修改被打回的代码
修改好被打回的提交后,执行命令

git add .

git commit --amend //注意与第一次提交代码的区别,保证不会产生新的commitID和changeID,仍然使用上次的

git push origin branchName:refs/for/branchName //如果下载了review脚本执行命令:sh review.sh

说明:修改被带回提交时要保证修改的内容和开始创建review的提交在同一个提交里.

常见问题
1、clone第二个工程,提交review失败,提示如下
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)
需要执行上面的“3、下载提交代码的hook脚本”,
2、如果习惯使用source tree的可以在source中添加自定义的action
source tree自定义动作的入口:菜单栏 动作-→自定义操作
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)
提交review时候,在source tree commit时不要勾选push选项,然后执行自定义动作review, review动作的配置如下:
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)
修改完被打回的review,重新提交时,不要使用source tree提交,直接执行自定义动作updateReview, updateReview动作的配置如下:
Gitlab+Gerrit+Ldap+nginx+mysql 之 Gerrit 操作流程(二)