如何访问gerrit的h2数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何访问gerrit的h2数据库相关的知识,希望对你有一定的参考价值。

访问gerrit的h2数据库步骤:
1、从 https://code.google.com/p/gerrit/downloads/list 页面下载gerrit的war包到某个目录
2、数据库准备,懒得设置用了默认的H2 DB
3、创建gerrit2用户,初始化
sudo adduser gerrit2
sudo su gerrit2
java -jar gerrit.war init -d /home/gerrit2/site
一些交互式提问,默认或自定义,同样懒得设置apache,认证用了 development_become_any_account 选项,反向代理没有;
设置完成就自动启动了~; 如果没有启动手动 ./site/bin/gerrit.sh start

4、创建标准 后台服务连接
sudo ln -snf `pwd`/site/bin/gerrit.sh /etc/init.d/gerrit.sh
sudo ln -snf ../init.d/gerrit.sh /etc/rc3.d/S110gerrit
sudo ln -snf ../init.d/gerrit.sh /etc/rc5.d/S110gerrit

5、登陆http://10.20.20.XX:9080,页面右上角点击become :
注册用户 fullname emailaddress name ssh公钥(.ssh/id_rsa.pub)设置保存,
设置保存后,在客户端验证一下,命令及输出如下:

[$name@$hostname ~]$ ssh -p 29418 $name@10.20.20.XX

**** Welcome to Gerrit Code Review ****

Hi $fullname, you have successfully connected over SSH.

Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:

git clone ssh://$name@$hostName.$domainname:29418/REPOSITORY_NAME.git

Connection to 10.20.20.XX closed.

6、从gerrit服务器,clone代码工
git clone ssh://$name@10.20.20.XX:29418/$repoName.git
7、进入项目目录cd $repoName 安装hook; 钩子的目的是在提交信息中自动创建 \'Change-Id:\' 标签
scp -p -P 29418 $name@10.20.20.XX:hooks/commit-msg .git/hooks/
8、修改提交
9、push 到gerrit服务器
git push origin HEAD:refs/for/$branchName
#直接git push会失败,原因还不知道~~ ~~
10、push成功后web页面All->open和My->changes标签下面,就可以看到提交的修改了

11、web的review没有approve选项,需要在project的accecss中增加相应权限; 还有后面的verify权限也是类似操作;
参考技术A ##############################################################
remote: Resolving deltas: 100% (2/2)
error: unpack failed: error Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
fatal: Unpack error, check server log
To ssh://newptone@review.ustack.com:29418/neutron.git
! [remote rejected] HEAD -> refs/publish/datong (n/a (unpacker error))
error: failed to push some refs to 'ssh://newptone@review.ustack.com:29418/neutron.git'
#####################################################################

出现类似到错误是因为删除原先的旧有代码,而gerrit上相关的代码旧提交未处理导致到。存在数据库中的neutron.git库patch_set找不到对应的object。

解决方法:登录到gerrit server 进入数据库我这边用到是H2数据库
java -jar bin/gerrit.war gsql
\d
select * from PATCH_SETS ;
查找到613fd2557fba30aff2dbd51c3807cc57561bab08对应到ID

CREATED_ON | DRAFT | REVISION | UPLOADER_ACCOUNT_ID | CHANGE_ID | PATCH_SET_ID
------------------------+-------+------------------------------------------+---------------------+-----------+-------------
2015-01-04 15:57:08.423 | N | 613fd2557fba30aff2dbd51c3807cc57561bab08 | 1000002 | 1 | 1

然后update changes set open='N',status='A' where change_id=1;
status=A (Abandon)
回网页看提交已经没有了。本回答被提问者和网友采纳

如何在gerrit中修改已提交的change

在gerrit审核中,经常会遇到开发人员提交的代码审核不通过的情况。
那么开发人员这时有两个选择:
按照要求修改代码,然后重新提交一次代码
修改原来的Change
第一种方法会产生多次commit,而这些commit实际上是没有太多意义的,所以不推荐使用。
所以推荐第二种方法。下面讲解如何做:
安装 commit-msg hook
安装gerrit的commit-msg hook的目的是为了能够在每次提交的时候在你的本地产生一个Change-Id,这个Change-Id是将gerrit的Change和你的commit联系起来的纽带。
# 到项目的根目录下执行
curl -Lo .git/hooks/commit-msg
chmod u+x .git/hooks/commit-msg
这样的话,你每次提交的时候,这个hook都会在commit message的后面添加一行Change-Id:
$ git log -1
commit 29a6bb1a059aef021ac39d342499191278518d1d
Author: A. U. Thor
Date: Thu Aug 20 12:46:50 2009 -0700
Improve foo widget by attaching a bar.
We want a bar, because it improves the foo by providing more
wizbangery to the dowhatimeanery.
Bug: #42
Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
修改已经提交至gerrit的commit
$ git checkout 有问题的commit
$ <修改>
$ git commit --amend
$ git push origin HEAD:refs/for/master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 546 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: updated: 1, done
remote:
remote: Updated Changes:
remote: gerrithost:8080/68
remote:
To ssh://gerrithost:29418/RecipeBook.git
* [new branch] HEAD -> refs/for/master
注意到上面的Updated Changes字样了吗?这说明我们是更新了gerrit上的Change,而不是一般情况下的New Changes。
然后你到gerrit上查看自己的Change,是不是有变化了?
windows下怎么弄?
commit-msg hook在windows下可能无法起作用,但我们依然有办法解决这问题。
我们还是按照前面讲的步骤来:
$ git checkout 有问题的commit
$ <修改>
$ git commit --amend
注意,这个时候你需要手工添加Change-Id了,到gerrit上找到自己的Change的Change-Id:
上图的最后一样就是Change-Id,然后手工添加到commit注释的最后一行上:
Change-Id: I347f61e90f259c78fcaaa8367b804941005a9b2b
然后
$ git push origin HEAD:refs/for/master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 546 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: updated: 1, done
remote:
remote: Updated Changes:
remote: gerrithost:8080/68
remote:
To ssh://gerrithost:29418/RecipeBook.git
* [new branch] HEAD -> refs/for/master
参考技术A 那么开发人员这时有两个选择:
按照要求修改代码,然后重新提交一次代码
修改原来的Change
第一种方法会产生多次commit,而这些commit实际上是没有太多意义的,所以不推荐使用。
所以推荐第二种方法

以上是关于如何访问gerrit的h2数据库的主要内容,如果未能解决你的问题,请参考以下文章

gerrit server搭建

centos nginx gerrit

如何从另一个 Spring Boot 应用程序访问一个 Spring Boot 应用程序的内存 H2 数据库

如何搭建基于ldap和mysql的gerrit服务

如何在 H2 数据库中查看模型类

docker 容器中的 H2 DB