安装git-review

yum install git-review  # centos7上epel源上有git-review rpm包
pip install git-review  # pip源安装亦可


1、第一次提交

git clone 远程仓库
git config --global user.email "yao.xxxxx@xxxxx.net"
git config --global user.name "xxxxxxx" # 配置全局的用户名
git config --global --add gitreview.username "xxxxxxxx" # 配置gitreview用户名
git remote add gerrit ssh://xxxxxx@review.sh.xxx.net:29418/xxxcloud/openstack-deploy.git   # 代码走review过程 
git remote add gerrit https://<<https认证用户>>:<<https认证密码>>@@review.sh.xxx.net/xxxcloud/openstack-deploy.git # 在国内29418端口被墙了,你可以选择https的方式
git checkout -b 新分支 (分支命名:跟你提交的功能相关)
git add .
git commit # 填写提交信息
git review -v # -v显示详细信息


2、已经提交过,针对上一次提交的patch

git fetch ssh://xxxxxx@xxxxxx:29418/99cloud/openstack-deploy refs/changes/13/13/1 && git checkout FETCH_HEAD  # git fetch下远程的patch分支
git checkout -b 新分支 (分支命名:跟你提交的功能相关)
git add .
git commit --amend # 使用同样的change id
git review -v(出现冲突,需要git rebase)


3、针对远程feature开发分支的bug修复

[root@pxe openstack-deploy]# git branch -a     # 基于master分支有个cr-dev分支
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/cr-dev
  remotes/origin/master
  
[root@pxe openstack-deploy]# git checkout  --track origin/cr-dev  # --track 可以让本地分支cr-dev和远程分支cr-dev做upstream
Branch cr-dev set up to track remote branch cr-dev from origin.
Switched to a new branch 'cr-dev'

[root@pxe openstack-deploy]# git branch -a
* cr-dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/cr-dev
  remotes/origin/master
  
[root@pxe openstack-deploy]# git checkout -b fix_haproxy_influxdb  # 基于本地cr-dev分支,创建一个新的branch出来作为review的topic

[root@pxe openstack-deploy]# git branch -a
  cr-dev
* fix_haproxy_influxdb
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/cr-dev
  remotes/origin/master
  
 # 在你提交之前,远程分支cr-dev上已经有几个commit了,这时候需要git rebase
[root@pxe openstack-deploy]# git checkout cr-dev  # 切换到cr-dev

[root@pxe openstack-deploy]# git branch -a
* cr-dev
  fix_haproxy_influxdb
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/cr-dev
  remotes/origin/master
  
[root@pxe openstack-deploy]# git fetch origin # 这里不用git pull,git pull相当于git fetch && git merge过程
[root@pxe openstack-deploy]# git merge origin/cr-dev # 和远程的cr-dev分支合并

[root@pxe openstack-deploy]# git checkout fix_haproxy_influxdb # 切换到fix_haproxy_influxdb分支
Switched to branch 'fix_haproxy_influxdb'

[root@pxe openstack-deploy]# git rebase -i cr-dev # 会将cr-dev分支的代码合并过来,并按照提交的顺序排序

[root@pxe openstack-deploy]# git add *
[root@pxe openstack-deploy]# git commit 
[root@pxe openstack-deploy]# git review

# 如果gerrit code reivew merge的时候遇到如下错误,如何解决?
The change could not be merged due to a path conflict.
Please rebase the change locally and upload the rebased commit for review.
解决:
    git checkout master
    git pull --rebase
    git checkout  bug/1485710(举例bug分支)
    git rebase -i master
    有冲突,手动解决
    git add .
    git commit --amend
    git review

# git生成patch
[root@pxe openstack-deploy]# git format-patch 前commit-id 后commit-id(不写,默认最后一个commit-id)

# 如何解决gerrit和gitlab数据不一致
找出gerrit数据目录
GerritCodeReview -jar /etc/review_site/bin/gerrit.war daemon -d /etc/review_site --run-id=1445571445.29699

/etc/review_site  gerrit数据目录

[root@review ~]# ll /etc/review_site/git/openstack/
total 0
drwxr-xr-x 7 root root 129 Nov  3 11:39 cinder.git

删除cinder.git
[root@review ~]# cd /etc/review_site/git/openstack/
[root@review ~]# rm cinder.git
[root@review ~]# git clone --bare git@172.16.102.51:openstack/cinder.git # 加上--bare选项