公司用的不是常规的gitlab/gitea,我之前用git都是用的source tree,有点水土不服,因此就记录下整个使用流程。

初始化配置

登录

前往武汉测试学习用gerrit:http://*.*.*.*:20080/
前往登录

输入用户名密码

使用公司的LDAP账户与密码进行登录.
记得激活邮箱,最好用公司邮箱,激活了邮箱才能正常收到邮件:
激活邮箱

创建项目

前往BROWSE - Repositories
前往项目列表
创建项目

等待创建完成。

生成密钥

一路回车即可,可以自己设置密码

ssh-keygen

绑定密钥

打开C:\Users\xiaoh\.ssh\

将里面的密钥复制,粘贴到网页头像 -- setting -- SSH Keys -- 输入New SSH key -- ADD NEW SSH KEY路径

导入密钥

这样即可:
导入正确密钥

wsl

由于目前我们大部分还在Windows平台开发,而我们需要使用Ubuntu,因此先准备个wsl吧,Ubuntu20.04即可。
然后用软链接将wsl的目录和Windows目录链接到一起

sudo su
cd /root
mkdir /root/Git
ln -s /mnt/c/Users/xiaoh/'My Documents'/Git /root/Git
mkdir /root/.ssh
ln -s /mnt/c/Users/xiaoh/.ssh .ssh

这样以后直接到/root/Git内推送即可。

获取项目初始化

上面依旧创建了项目,点击进入这个项目,进入你设定的Git目录,拉取项目

git clone "ssh://xiaochangxin@192.168.71.100:29418/zcloud_autoweb_zkeeper_webui" && scp -p -P 29418 xiaochangxin@192.168.71.100:hooks/commit-msg "zcloud_autoweb_zkeeper_webui/.git/hooks/"

使用Clone with commit-msg hook即可。它在clone 项目的同时,复制 gerrit 提供的 commit-msg 钩子脚本,它的作用是在每次新的提交时生成 change-id。

root@DESKTOP-CL6T7M5:~# sudo su
root@DESKTOP-CL6T7M5:~# cd /root/Git/Zettakit-Git/
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git# ls
essay
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git# git clone "ssh://xiaochangxin@192.168.71.100:29418/zcloud_autoweb_zkeeper_webui" && scp -p -P 29418 你的用户名@服务器IP:hooks/commit-msg "zcloud_autoweb_zkeeper_webui/.git/hooks/"
Cloning into 'zcloud_autoweb_zkeeper_webui'...
Enter passphrase for key '/root/.ssh/id_rsa':
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), 197 bytes | 197.00 KiB/s, done.
Enter passphrase for key '/root/.ssh/id_rsa':
commit-msg                                                                            100% 2174   958.3KB/s   00:00
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git#

转移项目

将你的项目复制到你的这个目录下,目录树如下所示。

root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# tree -C -L 2
.
├── autoit-v3
│   ├── install
│   └── script
└── selenium_-pytest_-allure
    ├── README.md
    ├── __pycache__
    ├── config
    ├── conftest.py
    ├── logs
    ├── page
    ├── pytest.ini
    ├── report
    ├── requirements.txt
    ├── resource
    ├── run.py
    ├── test
    ├── test_case
    ├── utils
    └── venv

为了规范化,新增一个README.md
vim README.md

创建develop分支

为了避免直接把代码合并到master分支,需要创建个develop分支,平常上传的时候先上传到这个分支,确定可以用后再合并到master
前往Repositories - Branches -CREATE NEW
新建分支

新建一个gitreview

再新建gitreview

vim .gitreview

[gerrit]
host=服务器ip
port=29418 
project=zcloud_autoweb_zkeeper_webui
defaultbranch=develop #这里指向了 develop 分支。

注意修改项目名称。

GIT操作

第一次上传

git add .
git commit -m "单节点与多节点部署与重置"

直接使用

git review

由于我没配置我的默认用户名,因此报错了。但没事,,按照提示输入就行了。

root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git review
ssh://root@服务器ip:29418/zcloud_autoweb_zkeeper_webui did not work. Description: root@服务器ip: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Could not connect to gerrit.
Enter your gerrit username: xiaochangxin
Trying again with ssh://用户名@服务器ip:29418/zcloud_autoweb_zkeeper_webui
Enter passphrase for key '/root/.ssh/id_rsa':
Creating a git remote called 'gerrit' that maps to:
        ssh://用户名@服务器ip:29418/zcloud_autoweb_zkeeper_webui
Enter passphrase for key '/root/.ssh/id_rsa':

This repository is now set up for use with git-review. You can set the
default username for future repositories with:
  git config --global --add gitreview.username "xiaochangxin"

Enter passphrase for key '/root/.ssh/id_rsa':
Enter passphrase for key '/root/.ssh/id_rsa':
remote:
remote: Processing changes: new: 1 (\)
remote: Processing changes: new: 1 (|)
remote: Processing changes: new: 1 (/)
remote: Processing changes: refs: 1, new: 1 (/)
remote: Processing changes: refs: 1, new: 1 (/)
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote:   http://服务器ip:20080/c/zcloud_autoweb_zkeeper_webui/+/201 单节点与多节点部署与重置 [NEW]
remote:
To ssh://服务器ip:29418/zcloud_autoweb_zkeeper_webui
 * [new branch]      HEAD -> refs/for/develop%topic=master
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui#

此时,本次 commit 已经提交到 gerrit 上,并生成好了change-id,等待审核 Code-Review。这里演示先 Code-Review -1,然后 Code-Review -2,相当于本次提交不通过。接下来,我们在做一下修改,再次提交(注意:这里我们要使用上一次提交的 change-id,意思是再次提交作为上一次的修改补丁),最后 Code-Review +1,Code-Review +2 审核通过本次提交,真正合并到分支上。(以上都是用我一个人的账号进行 Code-Review,实际应用中,可以事先指定好各审核人也就是项目创建者。)

第二次上传

我在这里修改下README.md,让它描述的更详细点。

root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# nano README.md
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# cat README.md
# Zkeeper WEB-UI自动化部署
已测试成功:
- 单节点部署
- 多节点部署
- 单节点重置

这里使用git commit --amend,是表示进行修正,change-id不变,继续提交。
git commit --amend

最后进行提交
git review
在这里就不会报用户名错误了,因为之前修改了这个项目的用户名。

root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git review
Enter passphrase for key '/root/.ssh/id_rsa':
Enter passphrase for key '/root/.ssh/id_rsa':
remote:
remote: Processing changes: updated: 1 (\)
remote: Processing changes: updated: 1 (|)
remote: Processing changes: refs: 1, updated: 1 (|)
remote: Processing changes: refs: 1, updated: 1 (|)
remote: Processing changes: refs: 1, updated: 1, done
remote:
remote: SUCCESS
remote:
remote:   http://服务器ip:20080/c/zcloud_autoweb_zkeeper_webui/+/201 单节点与多节点部署与重置
remote:
To ssh://服务器ip:29418/zcloud_autoweb_zkeeper_webui
 * [new branch]      HEAD -> refs/for/develop%topic=master
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui#

可以看出updated: 1, done,是更新了项目。
至此,针对本次的修改才被真正 merge 到分支上了。

合并分支

审核代码

如果你不是管理员,下面的操作不用看了。
如果作为管理,确定提交的分支肯定没已知bug,那就需要进行合并分支了。
在项目的主页上,有两个选项:
项目选项

1:浏览
2:检查变化

在这里先浏览可以看到这个项目内没一行代码,这是因为master,develop内没审核通过代码。
项目
因此,前往VIEW CHANGES
可以查看提交的代码。点击进去
提交项目
可以看到主要有以下几个地方需要关注:
关键点

1.选择审稿人
2.是否提交到develop等分支中。

编辑审稿人,然后点击send,审稿人就会收到一封邮件(如果邮箱绑定正确的话)
选择审稿人
如果是你自己的项目,直接输入评分就可以合并了。
评分

可以看到develop下已经有项目了,但master没文件,因为没将develop分支合并到master。
develop
master

合并master

由于.gitreview默认是用的develop分支,用命令合并不太方便,因此我用网页进行合并。
一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。
另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

这里是需要合并所有的改动,因此使用git merge

root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git checkout master
Already on 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git merge --no-ff gerrit/develop
Already up to date.
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git commit -m "合并develop到master"
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
root@DESKTOP-CL6T7M5:~/Git/Zettakit-Git/zcloud_autoweb_zkeeper_webui# git push
Enter passphrase for key '/root/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://192.168.71.100:29418/zcloud_autoweb_zkeeper_webui
   0ae344d..01ddfe3  master -> master

项目合并进master了。
master


参考:
Git Review + Gerrit 安装及使用完成 Code-Review
Gerrit 代码审核(Code Review)
Gerrit使用篇-提交代码,合并代码

最后修改:2021 年 07 月 28 日
如果觉得我的文章对你有用,请随意赞赏