gerrit - first commit
来源:互联网 发布:如何修改软件源代码 编辑:程序博客网 时间:2024/06/03 19:03
转载自:http://blog.sina.com.cn/s/blog_4b5039210102e5o5.html
一篇具有实践意义的文章
gerrit还是轻易不要尝试引入,它的权限管理,真是复杂极了。对于小型团队,初期这将是个噩梦,但是对于像OpenStack,安卓这种大型team,又是一把利器。
首先要做的准备工作就是准备两个gerrit用户,user1和user2,并且分别把user1和user2的sshpub-key通过gerrit setting添加好。
1. 首先user1创建一个叫HelloWord的project。
2. user1在自己的工作环境中把HelloWord clone下来
[user1@jenkins ~]$ git clonessh://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.
加入user1没有添加ssh pubkey的话,这一步会出permission deny
clone后,创建一个README文件并add,commit
[user1@jenkins ~]$ cd HelloWorld
[user1@jenkinsHelloWorld]$ ls
[user1@jenkins HelloWorld]$ touchREADME
[penxiao@jenkins test]$ git add README
[penxiao@jenkins test]$ git commit -m add README
这里注意一点,在下面要push之前,一定要配置好git config的 username和email
可以通过命令行或者直接编辑~/.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
[user1@jenkins HelloWorld]$
在gerrit的gitweb链接可以查看push的文件。
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.
加入user1没有添加ssh pubkey的话,这一步会出permission deny
clone后,创建一个README文件并add,commit
[user1@jenkins ~]$ cd HelloWorld
[user1@jenkins
[user1@jenkins
[penxiao@jenkins test]$ git add README
[penxiao@jenkins test]$ git commit -m add README
这里注意一点,在下面要push之前,一定要配置好git config的 username和email
可以通过命令行或者直接编辑~/.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
[user1@jenkins HelloWorld]$
在gerrit的gitweb链接可以查看push的文件。
3. user2加入
[user2@jenkins ~]$ git clonessh://user1@gerrit.example.com:29418/HelloWorld.git
Initialized empty Git repository in/home/user2/HelloWorld/.git/
remote: Counting objects: 3, done
remote: 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]$ ls
README
[user2@jenkins HelloWorld]$
user2对README文件进行修改,然后要commit,push
!!!也同样注意,user2的git config,username和email的配置,email要和gerritsetting里的一致。
commit完以后可以看到
[user2@jenkins HelloWorld]$ git log
commit 7959fe47bc2d2f53539a1861aa6b0d71afe0a531
Author: user2<user2@gerrit.com>
Date: Thu Dec 12 00:24:53 2013 -0500
commit 98099fc0de3ba889b18cf36f9a5af267b3ddb501
Author: user1<user@gerrit.com>
Date: Thu Dec 12 00:15:08 2013 -0500
[user2@jenkins HelloWorld]$
现在user2要把这次的改变push到gerrit,可以么?
不行的,可以看到
[user2@jenkins HelloWorld]$ git push origin master
Counting 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 performthis operation.
remote: To push into this reference youneed 'Push' rights.
remote: User: user2
remote: Please read the documentation and contact anadministrator
remote: if you feel the configuration is incorrect
remote: Processing changes: refs: 1, done
To ssh://user2@gerrit.example.com:29418/HelloWorld.git
error: failed to push some refs to 'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
[user2@jenkins HelloWorld]$
这就是gerrit的精髓所在了。原因是gerrit不允许直接将本地修改同步到远程仓库。客户机必须先push到远程仓库的refs/for/*分支上,等待审核。这也是为什么我们需要使用gerrit的原因。gerrit本身就是个代码审核工具。
接下来更该push的地址:
[user2@jenkinsHelloWorld]$git config remote.origin.push refs/heads/*:refs/for/*
此命令实际是更改的是本地仓库test_project/.git/config文件。
再次push
[user2@jenkinsHelloWorld]$git push origin
这次不要加master
[user2@jenkins HelloWorld]$ git push origin
Counting objects: 5, done.
Writing objects: 100% (3/3), 249 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
remote: ERROR: missing Change-Id incommit message footer
remote: Suggestion for commit message:
remote: edit README
remote:
remote: Change-Id:I7959fe47bc2d2f53539a1861aa6b0d71afe0a531
remote:
remote: Hint: To automatically insert Change-Id, install thehook:
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
error: failed to push some refs to'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
尼玛,还是不行,说缺change-Id,为了能让每次commit能自己insert这个change-id,需要从gerrit server上下载一个脚本
[user2@jenkins HelloWorld]scp -p 29418 user2@gerrit.example.com:hooks/commit-msg<local path to yourgit>/.git/hooks/
然后重新commit
[user2@jenkins HelloWorld]$ git commit --amend
再次查看git log
[user2@jenkins HelloWorld]$ git log
commit f6b5919170875b5b4870fca2ab906c516c97006e
Author: user2<user2@gerrit.com>
Date: Thu Dec 12 00:24:53 2013 -0500
commit 98099fc0de3ba889b18cf36f9a5af267b3ddb501
Author: user1<user1@gerrit.com>
Date: Thu Dec 12 00:15:08 2013 -0500
[user2@jenkins HelloWorld]$
这次就有了change id
然后再次push
[user2@jenkins HelloWorld]$ git push origin
Counting 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, done
remote:
remote: New Changes:
remote: http://gerrit.example.com:8080/1
remote:
To ssh://user2@gerrit.example.com:29418/HelloWorld.git
[user2@jenkins HelloWorld]$
终于尼玛成功了!!!
0 0
- gerrit - first commit
- gerrit - first commit
- Gerrit 提交commit
- First Commit
- First Commit
- first commit
- git first commit
- Gerrit多次commit造成多次review请求的解决方法
- Gerrit error when Change-Id in commit messages are missing
- google gerrit repo, git commit如何自动生成Change-Id
- gerrit 删除废弃的提交(Abandoned commit change)
- Gerrit error when Change-Id in commit messages are missing
- gerrit 删除废弃的提交(Abandoned commit change)
- gerrit
- Gerrit
- gerrit
- 解决git提交到gerrit ERROR: missing Change-Id in commit message footer 问题
- Eclipse中使用GIT(二):My First Commit
- ./configure 时如何换行(使用续行符)
- git学习笔记
- mybatis 批量增加 Parameter '__frch_item_0' not found. Available parameters are [list]
- 从客户端中检测到有潜在危险的 Request.Form 值
- Opencv_Rotation
- gerrit - first commit
- 《转》OpenStack Ceilometer 安装配置和API说明
- Caffe代码导读(1):Protobuf例子
- for循环
- 【转】MySQL日期时间函数大全
- GDB调试命令详解
- Xcode5和6上新建工程如何本地化启动页面
- 威佐夫博弈
- Linux的run-level: