安裝沒有太大的問題,網上大把的資料,這裏記錄下遇到的問題及解決辦法。
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 -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: |
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