Java版本控制:Gerrit的使用

一、Gerrit介绍

Gerrit 是建立在 git 版本控制系统之上的,基于 web 的代码审核工具

Gerrit 是免费的,开源的,有一个可视化界面可供用户操作。

主要用于代码审核,gerrit强制引入了代码审核机制, 通过人工代码审核和自动化代码验证的方式, 确保核心代码多人校验、多人互备和自动化构建核验 。

二、Gerrit和Git区别

  • Git是一种版本控制系统;而Gerrit是一种基于web的代码审查软件。
  • Git 用于代码的存储和版本控制;Gerrit 用于团队间相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

三、Gerrit 和 Gitlab 区别

  • 开发风格

    gitlab 的特点是一个人维系一个分支。
    gerrit 的特点是一个团队维系一个分支。

  • 权限管理
    gitlab 可以根据需要创建 project,每个团队可以根据自己的需求管理自己的代码,方式更加的灵活。
    gerrit 比较单一,而且权限配置比较复杂,往往都是要联系管理员做出修改,每个团队很难做到对代码的个性化管理。

  • 代码评审
    gitlab 是以 merge request 作为一次 review,merge request 中可能包含多个 commit,如果 review 不通过也不需要发起另一次 merge request。
    gerrit 是以 commit 作为一次 review,由于 changeId 的存在,可以对一次commit反复的进行review。 如果task划分的粒度够细的话,并不会影响各个团队的review习惯。

  • 团队协作
    gitlab 可以选择公开代码,团队间可以看到互相的代码,有利于团队的协作。
    gerrit 由于权限控制问题,只能在权限范围内公开代码。

  • 信息共享
    gitlab 可以提供 issues,wiki 等功能方便开发者与使用者之间的沟通,并且 gitlab 可以无缝的与一些项目管理工具集成,比如:jira。
    gerrit 这个方面比较欠缺。

四、Gerrit工作流程

git的流程:git add -> git commit -> git pish -> 远程仓库 (repositoriies)

gerrit的流程:

  1. 开发编写代码
  2. push到gerrit服务器
  3. 审核人员在web服务器review(可以多人review)
  4. 审核通过(approve)后
  5. 提交(submmit)代码到远程仓库(repositoriies)

在使用过程中,有两点需要特别注意下:

  • 当进行 commit 时,必须要生成一个 Change-Id,否则,push 到 gerrit 服务器时,会收到一个错误提醒。
    提交者不能直接把代码推到远程的 master 主线(或者其他远程分支)上去。这样就相当于越过了 gerrit了。 gerrit 必须依赖于一个 refs/for/*的分支。假如我们远程只有一个 master 主线,那么只有当你的代码被提交到 refs/for/master 分支时,gerrit 才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。
  • 当审核通过之后,gerrit 会自动将这条分支合并到 master 主线上,然后邮件通知相关成员,master 分支有更新,需要的成员再去pull就好了。

五、Gerrit的SSH配置

5.1git下载与安装

参考文档:git的下载与安装

5.2配置SSH

1.打开Git Bash,执行以下命令:

git config --global user.name "[name]"  //设置用户名
git config --global user.email "[email address]"  //设置邮箱

2.生成ssh key,执行以下命令:

ssh-keygen -t rsa //提示就直接回车,在用户目录下生成.ssh目录:里面有id_rsa.pub(公钥)、id_rsa(私钥)

3.打开.ssh目录,复制id_rsa.pub文件里面的内容。

4.打开Gerrit网站,找到settings -> SSH Keys -> add new ssh keys,将刚复制的公钥复制在这,就成功了。

5.3测试ssh

  1. 点击Project-> Create New Project
  2. 设置project name :Test1
  3. 创建用户组 dev verify review , People->Create New Group,创建三个组,dev组用于提交代码/verify用于验证代码/review组用于code review
  4. 在Project->access中设置权限,点击edit
  5. 开发提交代码
  6. 此时在all->open能够看到一次修改的提交,all->代表已经合并的提交,Abandon代表拒绝的提交 ,其中状态标志CR代表code review情况,V代表verify情况
  7. 点击蓝色按钮后,code review通过
  8. 点击蓝色按钮,V通过
  9. 当两者通过后,admin的submit功能出现
  10. 点击完成后,all->open看不到了,all->merged出现本次提交纪录

六、Gerrit的使用

1.选定一个存放git项目的目录,右键打开Git Bash

2.初始化git仓库

git init

3.clone远程仓库代码

git clone [http/ssh]

4.更新代码

执行git pull或者git fetch 来更新代码

注意:

  • git pull -v -progress "orgin" 命令可以显示更详细的信息,git pull命令会fetch所有的远程分支信息到本地,同时当前本地分支会进行合并
  • 如果本地有修改文件,并且远程也修改了文件,pull就会报错,需要手动处理冲突。

5.修改代码

使用git checkout来切换分支,再修改代码,修改完后使用git add把文件修改的内容添加到暂存区,在执行git commit 命令提交到本地库。

  • 提交某个文件:git commit 文件 -m "注释"
  • 提交多个文件:git commit 文件1 文件2 -m "注释"
  • 提交全部文件:git commit -m "注释"

删除文件:

  • git rm 文件
  • git add 文件
  • git commit 文件 -m "注释"

移动文件:

  • git mv 源文件路径 目标文件路径

注意:

  • 每次add和commit之前都要执行pull操作,避免后面push时产生冲突合并

6.push代码到服务器

将代码从本地branchX传到远端branchX

  • git checkout branchX
  • git pull
  • git push orgin HEAD:refs/for/branchX 或者 git push orgin branchX:refs/for/branchX

push完后需要上Gerrit管理界面邀请代码审核人员来review。

orgin:远程仓库名称,用git remove -v 可以查看所有的远程仓库名称。

7.切换分支

切换到branchX

  • git checkout branchX

注意:

  • 切换分支时,如果本地有未commit的文件,则使用git stash命令将当前分支的改动临时保存起来。然后再切换分支。
  • 切换回之前分支时,需要恢复被临时保存的改动。使用命令:

8.查看分支

  • git branch :只显示本地分支名,当前分支名前有星号。
  • git branch -v :显示本地分支名,当前分支名前有星号,显示commit id。
  • git branch -w : 显示本地分支名,当前分支名前有星号。显示commit id,显示追踪的远程分支名
  • git branch -a :显示所有分支名(包含远程分支名)
  • git branch -r:查看远程分支名

9.合并分支

再Gerrit里合并时请不要采用fast-forward快进方式,以把master分支合并到当前分支为例

  • git merge --no--ff -m "注释" master

其中–no–f表示不采用fast-forward快进方式。

10.暂存和恢复本地修改

暂存本地修改:

  • git stash -u

恢复本地修改:

  1. 先用git stash list 查看有多少个临时保存的改动
  2. 再用git stash apply --index stash@{n},n为git stash list 查看到的改动的数字。
  3. 再用git stash drop stash@{n}删除该临时保存的改动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值