當前位置:首頁 » 數據倉庫 » gerrit資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

gerrit資料庫

發布時間: 2023-02-11 11:42:05

① 如何根據賬號許可權讀取gerrit上某些庫的列表

  • -- sqlServer:一、操作步驟 首先進入資料庫級別的【安全性】-【登錄名】-【新建登錄名】 (圖1:新建登錄名) 2. 在【常規】選項卡中,如下圖所示,創建登陸名,並設置默認的資料庫。 (圖2:設置選項) 3. 在【用戶映射】選項卡中

② 字元終端如何訪問gerrit管理的git伺服器

首先創建這個項目
user@host:~$ ssh -p 29418 user@localhost gerrit create-project --name demo-project
user@host:~$

You need to make sure that at least initially your account is granted "Create Reference" privileges for the refs/heads/* reference. This is done via the web interface in the Admin/Projects/Access page that correspond to your project.
After that it』s time to upload the previous history to the server:
把數據傳到新建立的git倉庫中去
user@host:~/my-project$ git push ssh://user@localhost:29418/demo-project *:*
Counting objects: 2011, done.
Writing objects: 100% (2011/2011), 456293 bytes, done.
Total 2011 (delta 0), reused 0 (delta 0)
To ssh://user@localhost:29418/demo-project
* [new branch] master -> master
user@host:~/my-project$

③ 如何訪問gerrit的h2資料庫

訪問gerrit的h2資料庫步驟:
1、從 https://code.google.com/p/gerrit/downloads/list 頁面下載gerrit的war包到某個目錄
2、資料庫准備,懶得設置用了默認的H2 DB
3、創建gerrit2用戶,初始化
sudo adser 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 [email protected]

**** 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://[email protected]:29418/$repoName.git
7、進入項目目錄cd $repoName 安裝hook; 鉤子的目的是在提交信息中自動創建 'Change-Id:' 標簽
scp -p -P 29418 [email protected]: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許可權也是類似操作;

④ 如果發現git push到gerrit的文件不全怎麼辦

今天上午同事和我說neutron項目要換成全新的內部代碼,原先倉庫里的代碼要全部廢棄掉。於是我就簡單地創建了一個空項目使用git push --force將其置空。
下午的時候,麻煩事情就來了,同事發現提交patch的時候,會發現如下報錯:
remote: Resolving deltas: 100% (2/2)
error: unpack failed: error Missing unknown
fatal: Unpack error, check server log
To ssh://[email protected]:29418/neutron.git
! [remote rejected] HEAD -> refs/publish/datong (n/a (unpacker error))
error: failed to push some refs to 'ssh://[email protected]:29418/neutron.git'

通過google我找到了兩篇文章:
《Gerrit Code Review - Unpack error Missing unknown》一文是說git的某object受損導致:
http://asheepapart.blogspot.jp/2011/10/gerrit-code-review-unpack-error-missing.html
我使用文提供的方法發現根本就不存在 object。
然後我又搜到了一個在stackoverflow上的相關提問:
http://stackoverflow.com/questions/16586642/git-unpack-error-on-push-to-gerrit
提問指出如果你使用了git 1.8 + gerrit 2.7版本的組合,就會出現這樣的問題,可惜的是我所使用的git和gerrit版本均低於此。

鑒於網上沒有靠譜的解決辦法,只能自己去查問題所在了。先查看了gerrit的日誌:

[2014-01-07 03:57:15,400] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user newptone account 1) ring git-receive-pack '/neutron.git'
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:157)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:106)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:34)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:72)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:430)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.access$101(ScheledThreadPoolExecutor.java:165)
at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.run(ScheledThreadPoolExecutor.java:266)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:701)
Caused by: java.io.IOException: Unpack error on project "neutron":
AdvertiseRefsHook: org.eclipse.jgit.transport.AdvertiseRefsHookChain@77348c71class org.eclipse.jgit.transport.AdvertiseRefsHookChain

at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:156)
... 13 more
Caused by: org.eclipse.jgit.errors.UnpackException: Exception while parsing pack stream
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:202)
at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:142)
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:98)
... 13 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown
at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:125)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:228)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:812)
at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:956)
at org.eclipse.jgit.transport.BaseReceivePack.(BaseReceivePack.java:756)
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:167)
... 15 more

那麼就定義到這串哈希值,為什麼會丟失這個object ?
我順手敲了一個 git review -l,發現gerrit上居然有一個還沒有關閉的patch:
1974 master Add two interfaces for manipulate forwarding indivially

我打開Gerrit web界面,點擊這個patchset,跳出一段錯誤說明: cannot found.

啊哈,到這里真相就大白了。原因就是上午我在刪除原先的舊有neutron代碼時,忘記把gerrit上相關的neutron提交做關閉處理,而輸入git review命令時,gerrit會先做一個rebase操作,再做提交,然而neutron倉庫發生變化後,存在資料庫中的1974號patch_set找不到對應的object了,所以在執行:git push gerrit HEAD:refs/publish/datong 操作時發生了前面的問題。
事已至此,解決的辦法就是到reviewdb資料庫里,先從patch_sets表中找出change_id是1974的記錄,確定無誤後,我們從changes表中找出對應的記錄:

mysql> select * from changes where change_id=1974\G;
*************************** 1. row ***************************
change_key:
created_on: 2014-01-06 12:20:07
last_updated_on: 2014-01-07 03:02:09
sort_key: 002a4736000007b6
owner_account_id: 25
dest_project_name: neutron
dest_branch_name: refs/heads/master
open: Y
status: n
nbr_patch_sets: 1
current_patch_set_id: 1
subject: Add two interfaces for manipulate forwarding indivially
topic: portforwarding-api
last_sha1_merge_tested: NULL
mergeable: N
row_version: 2
change_id: 1974
1 row in set (0.00 sec)

我們要做的是將其關閉,並把狀態置為Abandon。(友情提醒,涉及重要業務,注意備份資料庫)
mysql> update changes set open='N',status='A' where change_id=1974;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0

OK,現在neutron的提交已經恢復正常,我可以安心地去做其他事情了:)

⑤ 如何搭建基於ldap和mysql的gerrit服務

一.搭建資料庫以及配置資料庫

1.使用yum install mysql-server安裝mysql
2.mysqladmin -u root password archermind(第一次設置密碼).設置密碼
3.修改 vi /etc/my.cnf
增加[client]項以及修改[mysqld]項.具體如下所示:

[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
default-character-set=utf8

[mysqld]
default-storage-engine = innodb-----這一行要加上
character-set-server=utf8-----這一行要加上
coll

⑥ 如何添加已有的本地repo倉庫到本地的gerrit伺服器

那些xml文件是分支配置的文件,使用的話直接init 後再sync就可以了 repo init git地址 -b 分支名 -m xml文件名 repo sync 如果要將本地代碼回到某個歷史版本直接checkout 或者 reset checkout 支持將文件切換到歷史版本,資料庫不會修改,還可以

⑦ 為什麼commit會產生大量的merge記錄

如標題描述,最近關於這個gerrit的submit type的設置引起了一個問題,我大概模擬了下開發的提交場景,如下:

開發A和開發B都在修改倉庫repo_test的代碼,開發A修改test1.txt 然後提交到gerrit上,並在gerrit上合入了這個提交(commitA),開發B沒有執行git pull, 直接修改了test2.txt, 這個test2.txt和test1.txt沒有任何關聯性,是完全不相關的模塊,然後開發B提交gerrit,然後gerrit上合入了這個提交(commitidB),此時,由於開發B的這個提交相對伺服器少了開發A的改動提交,就自動生成了一條merge(叫commitB+吧),比如如下:

以上,B+是自動生成的merge,這個自動merge的記錄在gerrit上是看不到的,真正的修改是在B,所以開發在gerrit上找到B,讓我(職位:CM)在B節點標記tag,我在B標記tag後打包(我執行git checkout B),發現沒有A的修改了,這就出問題了!!!但是git checkout B+就有A的提交!!

然後發現,是因為開發B沒執行git pull ,沒把A的改動帶進去,所以提交的時候就自動產生了這個merge的提交記錄,話說,使用rebase就不會產生,但是怎麼搞呢?

然後發現了gerrit的submit type 可以控制:

默認的是「Merge if Necessary」, 這個就是在有差異的時候自動生成一條merge記錄

所以換成「Rebase if Necessary」,這個會自動rebase,不會自動產生merge記錄

如下是gerrit換成「rebase if Necessary」的提交記錄:

STM32 對內部FLASH讀寫介面函數(轉)
ymodem協議c實現(轉)
STM32啟動模式及API(轉)
Keil STM32調試,使用ST-Link下載程序時提示「flash timeout.reset the target and try it again」
UVA 11020
LeetCode Maximal Square
Android中的消息機制
關於DPM(Deformable Part Model)演算法中模型可視化的解釋
Node.js能夠做什麼?
h 1071 The area
Linux經常使用命令(九)
[ACM] h 4248 A Famous Stone Collector (DP+組合)
linux程序設計——個人總結
poj3252-Round Number 組合數學
QML與C++交互:登陸界面設計
delphi2010發送郵件—中文顯示為亂碼解決
WCF探索之旅(五)——WCF與WebService的異同
資料庫備份還原,日誌清理代碼
【Android】自己定義View、畫家(畫布)Canvas與畫筆Paint的應用——繪圖、塗鴉板app的實現
Berkeley DB基礎教程
SSL和SSH的差別