gerrit疑难杂症合集
2020-10-29 init
2020-11-06 更新基础使用规则
2020-11-25 添加 进阶2. 更换账户
2020-12-17 添加 进阶3. 拉取线上代码
基础
1. pull
1.1 情景还原
gerrit如何拉代码?当前分支,存在并行开发,A已经完成评审并合入分支,B仍在开发未合入分支,且存在一个或多个提交,需要拉取A的代码接入到当前分支,怎么办?
1.2 解决办法
例如拉取分支dev_branch
git pull --rebase origin dev_branchgit status // 看有没有冲突
git add -u // 一键添加冲突项
git rebase --continue // 处理完冲突继续rebase
git rebase --abort // 我不处理了,放弃pull
git rebase --skip // 抛弃冲突项,pull到的内容就是不完整的了
2. push
2.1 情景还原
gerrit我该怎么push?代码怎么让别人评审?
2.2 解决办法
例如上传dev_branch
git push origin HEAD:refs/for/dev_branch
3. 根据review意见更新代码
3.1 情景还原
我的代码被评审提出了一系列修改意见,修改后,我是像gitlab/github那样再创建一个新的commit提交吗?
3.2 解决办法
不是的,这就是gerrit和gitlab/github不同的地方了,前者将多次提交看做同一主题的commit,使用patch概念管理,例如对于commit A,评审给出review意见,开发者按照意见进行修改,修改的部分作为同一个commit的patch,而如何判断同一个commit,就是commit id
了,需要添加个钩子hook
才会自动生成,不同的patch拥有相同的commit id
;后者使用merge-request策略,修改好后,作为新的提交再扔给服务器,然后提出合并请求,审批人根据diff同意或打回请求。两者各有优缺,但我属于old style,个人还是喜欢gerrit的patch管理思想。
例如上传dev_branch
git add -u // 一键添加修改的部分
git commit --amend // 作为补丁,将新的修改点加入到commit里
git push origin HEAD:refs/for/dev_branch // 跟push相同
进阶
1. 分支合并
1.1 情景还原
使用git merge
在本地执行分支合并操作,git push origin HEAD:refs/for/dev
到gerrit 上评审入库,提示:
! [remote rejected] HEAD -> refs/for/dev (no new changes)
1.2 原因
没有新的commit,使用git log
也可以看到,并没有类似Merge remote-tracking branch
,即这个合并,是线性的合并,那些需要合并的commit节点,在gerrit上都已经提交评审过了,所以本次merge并没有commit。
1.3 解决办法
方法1: 使用git merge --no-ff
,强制让git生成一个新的commit,这样就可以提交了
方法2:不经过gerrit,直接git push
入远程库,这个branch就会乱掉。
2. 更换账户
2.1 情景还原
我换了账户,也切了config,操作为:git config --global user.name
与git config --global user.email
,已经与gerrit服务器上的信息对上了,但在git push
的时候还是报错如下:
remote: ERROR: In commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
remote: ERROR: committer email address my_email@email.com
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: previous_email@email.com
remote: ERROR:
remote: ERROR: To register an email address, please visit:
remote: ERROR: https://my_gerrit.com/#/settings/contact
remote:
remote:
To http://my_gerrit.com:1234/my_repo! [remote rejected] HEAD -> refs/for/my_branch (invalid committer)
error: failed to push some refs to 'http://my_gerrit.com:1234/my_repo'
2.2 原因
很大概率你是使用的macOS的,macOS保存了登录gerrit的登录记录,把它清掉就好。
2.3 解决办法
Launchpad -> Other -> Keychain Access
直接搜索gerrit字样,就可以看到登录信息了,改成自己的id就可。
3. 如何在本地review别人的代码/拉取未合入的代码
3.1 情景还原
帮着别人调代码,由于这份提交有bug,不能合入到分支中,那该怎么搞到他的代码呢?
3.2 解决办法
3.2.1 等级一
git diff (your commit hash code) >> mycode.patch # 将本次提交与主干相比较,并输出到后缀为".patch"的文本文件中
# 将这个".patch"发给对方
git apply mycode.patch # 在对方的代码上应用本次提交
如果存在多个分支、多次提交,对方必须拥有跟你上次提交一模一样的代码,即相同的分支,相同的提交记录,而且还要发来发去,一点都不优雅。既然自己的代码已经push到了服务器等待大佬合并,那为啥不能从gerrit服务器直接拉取代码呢?
3.2.2 等级二
在gerrit页面上,是可以看到自己待review的提交的,进入提交详情页面,右上角有个download选项,点开就可以看到各种拉代码的方法了:
- Checkout,把自己的分支全部都拉下来
- Cherry Pick,把自己的提交拉下来,并且接在本地的分支头上
- Format Patch,就是控制打前几个patch,这里的patch就是gerrit特有的内容了
- Pull,跟Checkout有点像,区别跟普通的checkout和pull差不多
- Patch-File,跟diff法子一样,然后再apply
- Archive,把仓库的代码全部下下来,慎点,仓库很大的话就会下很久
我一般使用的是Checkout
,它对应的代码如下,可以看到,其内容实际上是git fetch
和git checkout
的组合,里面的refs/changes/233/2333/1
的最后一个数1
实际上对应着当前拉取的patch是本次commit的第1个patch,因此在这里控制后面的这个数,也就跟Patch-File
的行为差不多了。
Checkout
与Format Patch
、Pull
的行为差不多,需要注意的是Cherry Pick
,它内部执行的git cherry-pick
是将本次commit接在本地分支的头上,所以有可能,本地分支是超前与本次提交或者落后于本次提交,前者会出冲突,后者可能会丢失某些comit。
git fetch ssh://xxx@xxx.gerrit.com:1234/target_repos refs/changes/233/2333/1 && git checkout FETCH_HEAD
gerrit疑难杂症合集相关推荐
- 疑难杂症之各种小坑合集
踩坑小合集 前言 正文 Spring注解相关 一.@Async注解导致项目启动时提示循环注入错误 more and more 更多内容敬请期待,在闲暇之余都会记录上比较有趣的坑 !!!欢迎大家一起讨论 ...
- linux 中级 教程pdf,Linux初中级学习者指导Linux操作系统技术合集.pdf
红联的个人空间 Linux操作系统技术合集 作者:红联 Linux操作系统技术合 集 ─────Linux初, 中级学习者教程 Linux有些神奇,有人就这么说,Linux有些意思,我想尝尝,尚末安装 ...
- 最全知乎专栏合集:爬取11088个知乎专栏,打破发现壁垒(编程、python、爬虫、数据分析..)
最近逛博客,看到一篇很好的文章,整合了知乎上所有优秀的编程.算法专栏,对学习的帮助非常大,转载过来分享给大家: 众所周知,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获 ...
- 最全知乎专栏合集:编程、python、爬虫、数据分析、挖掘、ML、NLP、DL...
上一篇文章<爬取11088个知乎专栏,打破发现壁垒>里提到,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获取到11088个知乎专栏. 本回筛选出其中涉及:编 ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...
- Open3D点云处理算法最全合集
Open3D点云处理算法最全合集,致力于搜集可运行,可视化较好的Open3D算法,持续更新中- 1. Open3D 点云读取及可视化.离群点去除 2. Open3D 点云体素格下采样 3. Open3 ...
- JAVA Web项目中所出现错误及解决方式合集(不断更新中)
JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...
- 一、PyTorch Cookbook(常用代码合集)
PyTorch Cookbook(常用代码合集) 原文链接:https://mp.weixin.qq.com/s/7at6y2NcYaxGGN8syxlccA 谢谢作者的付出.
最新文章
- 力扣(LeetCode)刷题,简单+中等题(第28期)
- webservice 测试窗体只能用于来自本地计算机的请求
- 工作309:uni-获取vuex里面的值
- 4x3矩阵键盘扫描法c语言,四种4*4矩阵键盘的扫描方法
- 考软件测试初学者眼影,Summer 大讲堂第一期:如何制作出版级的高分辨率图表?...
- Python 的一些网络库(感谢Arbow)
- 07 SQL优化技术
- Atitit.编程语言的基础句型and汉语英文比较
- Docker部署AI算法教程
- python 邮件服务器_python SMTP邮件服务
- mac os 下 打开 JXM 文件
- Angular入门到精通系列教程(14)- Angular 编译打包 Docker发布
- 有没免费云桌面,免费桌面虚拟化软件? 确实有的
- 七牛云获取token中的bucket是什么?
- CANopen--基于DS402协议的伺服电机原点回零模式
- Java-----投票系统
- 中国储物篮市场运营状况及投资经营分析报告 2022-2027年版
- android wp8相机,Camera360 for WP8推出“时光相机” 让你重温岁月痕迹
- 磁盘划分和磁盘格式化
- lu分解 matlab课件,LU分解与部分旋转Matlab