最近公司有新项目,已经让领导帮我把clone和push的权限都开通了,但是在push的时候还是提交失败,错误信息如下:
$ git push origin master
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (26/26), 4.28 KiB | 257.00 KiB/s, done.
Total 26 (delta 21), reused 0 (delta 0)
remote: Resolving deltas: 100% (21/21)
remote: True
remote: Branch refs/heads/master:
remote: You are not allowed to perform this operation.
remote: To push into this reference you need 'Push' rights.
remote: User: deparks
remote: Please read the documentation and contact an administrator
remote: if you feel the configuration is incorrect
remote: Processing changes: refs: 1, done
To ssh://192.168.1.125:29418/bluetoothsmart.git
! [remote rejected] master-> master (prohibited by Gerrit)
error: failed to push some refs to 'To ssh://192.168.1.125:29418/bluetoothsmart.git'
折腾挺久后没找到原因,就去百度了一下,于是就找到了这篇文章,恰好解决了我的问题,因此记录一下。
以下内容转自:http://blog.sina.com.cn/s/blog_4b5039210102e5o5.html
gerrit还是轻易不要尝试引入,它的权限管理,真是复杂极了。对于小型团队,初期这将是个噩梦,但是对于像OpenStack,安卓这种大型team,又是一把利器。
[user1@jenkins ~]$ git clone ssh://user1@gerrit.example.com:29418/HelloWorld.git
Initialized empty Git repository in /home/user1/HelloWorld/.git/
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
clone后,创建一个README文件并add,commit。
[user1@jenkins ~]$ cd HelloWorld
[user1@jenkins HelloWorld]$ ls
[user1@jenkins HelloWorld]$ touch README
[penxiao@jenkins test]$ git add README
[penxiao@jenkins test]$ git commit -m add README
可以通过命令行或者直接编辑 ~/.gitconfig文件实现,而且email一定要和gerrit里注册的email一致,否者push也会出错。
[user1@jenkins HelloWorld]$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://user1@gerrit.example.com:29418/HelloWorld.git
* [new branch] master -> master
[user2@jenkins ~]$ git clone ssh://user1@gerrit.example.com:29418/HelloWorld.gitInitialized empty Git repository in /home/user2/HelloWorld/.git/remote: Counting objects: 3, doneremote: Finding sources: 100% (3/3)remote: Total 3 (delta 0), reused 3 (delta 0)Receiving objects: 100% (3/3), done.[user2@jenkins ~]$ cd HelloWorld[user2@jenkins HelloWorld]$ lsREADME
[user2@jenkins HelloWorld]$ git logcommit 7959fe47bc2d2f53539a1861aa6b0d71afe0a531Author: user2 <user2@gerrit.com>Date: Thu Dec 12 00:24:53 2013 -0500edit READMEcommit 98099fc0de3ba889b18cf36f9a5af267b3ddb501Author: user1 <user@gerrit.com>Date: Thu Dec 12 00:15:08 2013 -0500add README
[user2@jenkins HelloWorld]$ git push origin masterCounting objects: 5, done.Writing objects: 100% (3/3), 249 bytes, done.Total 3 (delta 0), reused 0 (delta 0)remote: Branch refs/heads/master:remote: You are not allowed to perform this operation.remote: To push into this reference you need 'Push' rights.remote: User: user2remote: Please read the documentation and contact an administratorremote: if you feel the configuration is incorrectremote: Processing changes: refs: 1, doneTo ssh://user2@gerrit.example.com:29418/HelloWorld.git! [remote rejected] master -> master (prohibited by Gerrit)error: failed to push some refs to 'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
[user2@jenkins HelloWorld]$ git config remote.origin.push refs/heads/*:refs/for/*
[user2@jenkins HelloWorld]$ git push originCounting objects: 5, done.Writing objects: 100% (3/3), 249 bytes, done.Total 3 (delta 0), reused 0 (delta 0)remote: Processing changes: refs: 1, doneremote: ERROR: missing Change-Id in commit message footerremote: Suggestion for commit message:remote: edit READMEremote:remote: Change-Id: I7959fe47bc2d2f53539a1861aa6b0d71afe0a531remote:remote: Hint: To automatically insert Change-Id, install the hook:remote: gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user2@gerrit.example.com:hooks/commit-msg ${gitdir}/hooks/remote:remote:To ssh://user2@gerrit.example.com:29418/HelloWorld.git! [remote rejected] master -> refs/for/master (missing Change-Id in commit message footer)error: failed to push some refs to 'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
[user2@jenkins HelloWorld] scp -p 29418 user2@gerrit.example.com:hooks/commit-msg <local path to your git>/.git/hooks/
[user2@jenkins HelloWorld]$ git commit --amend
[user2@jenkins HelloWorld]$ git logcommit f6b5919170875b5b4870fca2ab906c516c97006eAuthor: user2 <user2@gerrit.com>Date: Thu Dec 12 00:24:53 2013 -0500edit by user2Change-Id: Ieac68bebefee7c6d4237fa5c058386bf7c4f66b7commit 98099fc0de3ba889b18cf36f9a5af267b3ddb501Author: user1 <user1@gerrit.com>Date: Thu Dec 12 00:15:08 2013 -0500add README
[user2@jenkins HelloWorld]$ git push originCounting objects: 5, done.Writing objects: 100% (3/3), 289 bytes, done.Total 3 (delta 0), reused 0 (delta 0)remote: Processing changes: new: 1, refs: 1, doneremote:remote: New Changes:remote: http://gerrit.example.com:8080/1remote:To ssh://user2@gerrit.example.com:29418/HelloWorld.git* [new branch] master -> refs/for/master