打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
gerrit 遇到的错误
1. Permission denied (publickey)
我安装完后配置好.ssh/config里的账号和服务器地址,端口之类的之后,用ssh测试连通性时遇到这个错误,这时我可以用我的账号登录WebUI的gerrit,并已经把我的id_rsa.pub放到SSH Public Keys里面。
解决办法:
https://git.eclipse.org/r/Documentation/error-permission-denied.html
找到上面这个文章,里面第一点就说查看Settings -> Profile -> Username是否正确,这个Username就是ssh登录的用户名,但是我的这里为空。
我用的数据库是mysql,用mysql的账号密码登录:
mysql -uroot -p*****
use reviewdb;
select * from account_external_ids;
这时会显示如下
+------------+-----------------+----------+---------------+
| account_id | email_address   | password | external_id   |
+------------+-----------------+----------+---------------+
|          1 | email1@163.com  | NULL     | gerrit:test1   |
|          2 | email2@163.com  | NULL     | gerrit:test2   |
+------------+-----------------+----------+---------------+
在网上找的资料说这里的external_id还有一项username:test1之类的,这里没有,所有Profile里有空,手动添加:
insert into account_external_ids  values ('1','NULL','NULL','username:test1');
再查看一下:
select * from account_external_ids;
+------------+-----------------+----------+---------------+
| account_id | email_address   | password | external_id   |
+------------+-----------------+----------+---------------+
|          1 | email1@163.com  | NULL     | gerrit:test1   |
|          2 | email2@163.com  | NULL     | gerrit:test2   |
|          2 | NULL                        | NULL     | username:test1 |
+------------+-----------------+----------+---------------+
重新启动gerrit
./gerrit.sh restart
用test1登录后在Profile里的Username一项就会有test1,这时再用ssh测试就正常了。
ps:
修改的命令:update account_external_ids set external_id='username:*******' where external_id='username:*****';
2. fatal:  A Contributor Agreement must be completed before uploading:
这个问题是在git push的时候出现的提示,我是这样解决的:
在etc/gerrit.config文件的
·auth]下加
contributorAgreements = true
添加后重启gerrit,在WebUI里找到 All-Projects -> General 里会有如下的选项:
Contributor Agreements
Require a valid contributor agreement to upload:
把他改为FALSE之后就可以push了。
3. refs/heads/branch 和refs/for/branch的区别
后者不用说都知道是gerrit review用的,push到这个分支后在gerrit上就会有一个review出现,别人Review后才能提交到需要的分支。
前都其实就是正常push的分支,所以git push origin HEAD:branch和git push origin HEAD:refs/heads/branch的结果是一样的。
修改All-Project的Access的相应Reference就可以修改相应的权限。
还有两个分支也说一下:
refs/meta/config: 这个分支是gerrit的权限配置分支,不是每个项目下面都有,All-Projects有这个分支,其他的项目从这个分支继承。
refs/tags/*:不用多说,打Tag用的。
4. 删除错误的Gerrit提交
有时在文件系统上删除了项目,又新建了一个同名的项目,但在Gerrit里还有没有Merge的Review,这时会Review又会出现错误。解决办法是在数据库里直接把对应的Change删除:
ssh server gerrit qsql
gerrit> delete from changes where change_id=1;   //1为对应的change
5. 修改refs/meta/config
从Google镜像的Android仓库,有的项目里含有refs/meta/config这个分支,这个是git仓库配置用的,在gerrit里显示在Projects -> Access里面,有时我们可能要对其做些修改。我们直接clone项目时这个分支不会同步,需要手动fetch
git fetch origin refs/meta/config:config
git checkout config
//modify the files
git push origin config:refs/meta/config
Gerrit使用坑点
1、获取代码
获取代码直接pull的话,如果有人在之前push过代码,本地就会生成一个更改,commit msg 一般是自动生成merge ….。
因为拉下代码本地分支就合入其他人的更改,你要commit到本地,才能保证本地分支是最新的代码。如果有冲突,解决冲突以后你的代码才能是最新的,而且本地代码本身是有其他修改的(如果有commit的内容),所以你的本地分支就超前于远程分支,然后你push本地分支代码,这样远程分支和你本地分支一样都是最新的。
但是主分支上很多分支合并的图不是很好看,所以需要使用rebase来获取代码:git pull –rebase origin develop。
rebase的概念:最后一次获取远程分支的点,和最新提交的点,之间这段作为一个补丁,然后恢复到最后一次获取远程分支的点,拉取远程分支最新的改动,然后把你的补丁追加到这次获取远程分支的后面。
2、push代码没有安装commit-msg hook脚本
用终端直接提交会提示需要安装脚本才能push,复制提示命令执行,或者直接去gerrit去复制下载脚本的命令。再次提交会发现还是提示没有生成changedid,这时候需要在上次的提交上追加一个空提交:commit –amend ,这时候脚本生效,产生changedid,然后就可以push。
3、提交代码不能直接push
提交代码需要使用命令 git push origin HEAD:refs/for/develop
origin HEAD:refs/for/基本属于固定格式,refs大概是reference的缩写, develop的是分支名
4、使用http地址获取代码后push代码重复重复验证用户名和密码
获取代码可以使用http和ssh的两种方式获取:
http每次都需要输入密码和用户名,clone代码用http开头的链接获取。
ssh需要配置ssh的环境,clone代码ssh开头的链接获取。
如果前期用http地址clone的代码,后期不想频繁输入账号信息,通过git命令可以在本地完成origin的修改
git remote set-url origin url url是需要切换的地址
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
git push用法和常见问题分析
apache2 + git + gerrit + mysql 配备、简单git操作
git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
git push命令
Git push 常见用法
开发者日常使用的 Git 命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服