gerrit 安裝筆記

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 | [email protected]  | NULL     | gerrit:test1   |
|          2 | [email protected]  | 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 | [email protected]  | NULL     | gerrit:test1   |
|          2 | [email protected]  | 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章