32.7 创建新项目
一个Gerrit项目对应于一个同名的Git库,同时拥有一套可定制的评审流程。创建一个
因为已经为管理员分配了直接向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的评审流程。