Gerrit、repo的使用

一、引言

Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

repo是Google开发的用于管理Android版本库的一个工具,repo是使用Python对git进行了一定的封装,并不是用于取代git,它简化了对多个Git版本库的管理。用repo管理的版本库都需要使用git命令来进行操作。

二、Gerrit的用户添加

1、账号密码

注册Gerrit需给Gerrit管理员发送邮件获取账号密码。
获取账号、密码、IP后登录对应仓库页面

2、修改名字和邮箱

在这里插入图片描述
如邮箱为xxxx@google.com,则“Full Name”填写为xxxx:
在这里插入图片描述
注册邮箱:
注册成功后会给邮箱发送一封邮件,点击链接进行验证

3、linux下添加用户

linux下的用户名须和管理员给的Gerrit账号名相同,如果没有,请添加新用户:

git config --global user.name "xxxxx"(名字需要修改)
git config --global user.email "xxxxx@xxx.com.cn"(修改邮箱)
添加密钥
ssh-keygen -t rsa -C "自己邮箱地址"
一直按回车键即可

出现如下图 则为成功添加密钥
在这里插入图片描述
然后公钥添加到Gerrit:
复制如下文件中的公钥

~/.ssh/id_rsa.pub 


在这里插入图片描述
即添加成功

三、使用repo拉取Android源码

1、repo管理文件

1、使用 “repo init"拉取
2、使用"ls -a” 查看隐藏文件,该目录下会出现一个.repo文件夹,说明该目录存放的项目是一个用repo管理的版本库
在这里插入图片描述
3、进入到.repo,并查看目录内容,可以看到.repo目录下有manifest、project、repo文件夹等信息。
在这里插入图片描述
4、如果想查看Python封装的脚本,可到.repo/repo
在这里插入图片描述
5、如果想查看某个模块当前是在哪个分支,可以进入到manifests中去:
在这里插入图片描述

2、repo常用命令

解析拉取代码的命令
repo init -u ssh://ppgerrit.com/Mstar648/manifest.git -b 648_cultraview -m ppos4.5.0_cultraview.xml

其中:

-u:指定一个URL,其连接到一个manifest仓库

-b:选择manifest仓库中的一个特殊分支

-m:在manifest仓库中选择一个xml文件
repo init要完成如下操作:

完成repo工具的完整下载,执行的repo脚本只是引导程序
clone清单库manifest.git (地址是-u后面的参数)
clone的清单库位于manifest.git中,clone到本地.repo/manifest中,.repo/manifest.xml只是符号链接,它指向的是.repo/manifests/default.xml

如果manifest中有多个xml文件,repo init可以任意选择其中一个,默认选择的是default.xml。
上面的拉取代码示例选择的是ppos4.5.0_cultraview.xml里面的配置,那么.repo/manifest.xml指向的是.repo/manifests/ppos4.5.0_cultraview.xml

同步代码(repo sync)

执行了repo init 命令后,我们需要执行如下命令同步代码:

repo sync

-j : 多任务,一般8核心可以开到16任务,过多会起反作用

-c: 只下载当前分支代码

-d: 让工程回退到manifest指定的版本

-f: 如果某个工程同步失败,继续同步

参照清单文件.repo/manifest.xml克隆并同步版本库。如果项目版本库不存在,则执行repo sync命令相当于执行git clone;如果项目版本库存在,则相当于执行下面两条指令:

git remote update
相当于对每一个remote源执行了fetch操作

git rebase origin/branch
对当前分支的跟踪分支执行rebase操作

切换分支(repo start)

刚clone下来的代码是没有分支的
repo start 的实质就是对git checkout -b 的封装,可以为单个项目或所有项目以清单文件中已设定的分支为基础,在本地创建新的分支。

repo start --all branch_name

repo start 与 git checkout -b 的区别:

repo start:是在清单文件设定的分支基础上创建新的分支
git checkout -b: 是在当前所在分支的基础上创建新的分支

查看分支(repo branches)
repo branches
切换分支(repo checkout)
repo checkout brancnName
查看工作区文件的差异(repo diff)
repo diff 
查看文件状态(repo status)

该命令实际上是对git diff-index 和git diff-filse命令的封装,同时显示暂存区的状态和本地文件修改的状态

 repo status
删除指定分支(repo abandon)
  repo abandon branchName
删除已经合并分支(repo prune)

该命令实质是对git branch -d的封装,用于扫描项目的各个分支,并删除已经合并的分支,语法如下:

  repo prune
强制同步远端服务器的代码

使用 repo sync 命令来同步远端服务器的 Android 代码,如果本地修改了代码但还没有 commit,会提示无法 sync:

error: android/frameworks/base/: contains uncommitted changes

此时可以用过以下办法来强制同步代码

1、放弃本地某一git目录的修改,同步远程代码库

  1. 使用git reset 命令丢弃本地修改
  2. 然后再执行 repo sync 来同步代码

2、不丢失本地修改,强制同步远端服务器代码

repo sync -d 

此命令会将 HEAD 强制指向 repo manifest 版本,而忽略本地的改动。
注意:加上 -d 选项只表示忽略本地改动,可以强制同步远端服务器的代码,但是本地修改的文件还是保持改动不变,不会强制覆盖掉本地修改。而且同步之后,本地的分支指向会发生变化,不再指向原来的分支。具体举例如下。

3、强制让项目回滚整个项目到当前最新版本

repo forall -vc "git reset --hard"

如果执行完成后,依旧提示某个目录有改动,则切换到有问题的目录,继续执行

git reset --hard

完成后,删除所有没有增加到Git中的文件即可。

如果以上办法都不行,可以尝试下面这个命令
4、repo 回退当前所有的修改,和服务器上代码拉下来一样

repo forall -c "git clean -df" && repo forall -c "git checkout ." && repo sync -j8
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Git是一个分布式版本控制系统,它允许开发人员对项目进行版本管理。而Repo是Google开发的一个用于管理Git仓库的工具,它提供了简化Git操作的命令和工作流。使用Repo能更方便地管理多个相关的Git仓库。 而Gerrit则是基于Git的代码审查工具。它能与Git仓库进行集成,提供了代码审查、合并和管理的功能。在代码审查过程中,开发人员可以提交代码到Gerrit服务器进行审查,并通过Gerrit的界面查看其他开发人员的评论和意见。 在使用GitGerrit进行协作开发时,首先要使用Repo来管理多个Git仓库。通过Repo的命令和配置文件,可以统一管理一系列相关的Git仓库,实现代码的同步和分支的管理。 然后,在开发过程中,开发人员会通过Git操作将代码提交到相应的Git仓库。但是,在提交到主仓库之前,需要使用Gerrit进行代码审查。开发人员通过Gerrit的界面将代码提交到Gerrit服务器,然后由其他开发人员进行代码审查。审查人员可以在Gerrit上给出评论和建议,并根据需要进行代码修改。经过多轮的审查和修改,最终会将代码合并到主分支中。 总的来说,Git RepoGerrit是一套完整的代码管理工具。Repo用于管理多个Git仓库,提供便捷的仓库管理工具;而Gerrit用于代码审查,提供了代码的合并和管理的功能。这些工具的结合,能有效地提高团队的协作效率,并确保代码的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺小少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值