32.7 创建新项目

一个Gerrit项目对应于一个同名的Git库,同时拥有一套可定制的评审流程。创建一个

32.7 创建新项目 - 图1

32.7 创建新项目 - 图2

32.7 创建新项目 - 图3

32.7 创建新项目 - 图4

因为已经为管理员分配了直接向refs/heads/*引用推送的授权,这样就能够向Git版本库推送数据了。再执行一次推送任务看看能否成功。


$git push origin master

Counting objects:3,done.

Writing objects:100%(3/3),222 bytes,done.

Total 3(delta 0),reused 0(delta 0)

To ssh://localhost:29418/new/project.git

![remote rejected]master->master(you are not committer jiangxin@ossxp.com)

error:failed to push some refs to 'ssh://localhost:29418/new/project.git'


推送又失败了,但是服务器端返回的错误信息却不同。上一次出错返回的是"prohibited by Gerrit",而这一次返回的错误信息是"you are not committer"。

这是为什么呢?看看提交日志:


$git log—pretty=full

commit 15a549bac6bd03ad36e643984fed554406480b2c

Author:Jiang Xin<jiangxin@ossxp.com>

Commit:Jiang Xin<jiangxin@ossxp.com>

initialized.


提交者Committer为"Jiang Xin<jiangxin@ossxp.com>",而Gerrit中注册的用户的邮件地址是"jiangxin@moon.ossxp.com",两者之间不一致,导致Gerrit再一次拒绝了提交。如果再到Gerrit中看一下new/project的权限设置,会看到这样一条授权:


Category Group Name Reference Name Permitted Range

===============================================

Forge Identity Registered Users refs/*+1:Forge Author Identity


这条授权的含义是:提交中的Author字段不进行邮件地址是否注册的检查,但是要对Commit字段进行邮件地址检查。如果增加一个更高级别的"Forge Identity"授权,也可以忽略对Committer的邮件地址的检查,但是尽量不要对授权进行非必须的改动,因为在提交的时候使用注册的邮件地址是一个非常好的实践。

下面就通过git config命令修改提交时所用的邮件地址,和Gerrit注册时用的地址保持一致。然后用—amend参数重新执行提交以便让修改后的提交者邮件地址在提交中生效。


$git config user.email jiangxin@moon.ossxp.com

$git commit—amend-m initialized

[master 82c8fc3]initialized

Author:Jiang Xin<jiangxin@ossxp.com>

1 files changed,1 insertions(+),0 deletions(-)

create mode 100644 readme.txt

$git push origin master

Counting objects:3,done.

Writing objects:100%(3/3),233 bytes,done.

Total 3(delta 0),reused 0(delta 0)

To ssh://localhost:29418/new/project.git

*[new branch]master->master


看,这次提交成功了!之所以成功,是因为提交者的邮件地址更改了。看看重新提交的日志,可以发现Author和Commit的邮件地址不同,而Commit字段的邮件地址和注册时使用的邮件地址相同。


$git log—pretty=full

commit 82c8fc3805d57cc0d17d58e1452e21428910fd2d

Author:Jiang Xin<jiangxin@ossxp.com>

Commit:Jiang Xin<jiangxin@moon.ossxp.com>

initialized


注意,版本库初始化完成之后,应尽快删除为项目新增的"Push Branch"类型的授权,对新的提交强制使用Gerrit的评审流程。