- 浏览: 1147416 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- Java Foundation (41)
- AI/机器学习/数据挖掘/模式识别/自然语言处理/信息检索 (2)
- 云计算/NoSQL/数据分析 (11)
- Linux (13)
- Open Source (12)
- J2EE (52)
- Data Structures (4)
- other (10)
- Dev Error (41)
- Ajax/JS/JSP/HTML5 (47)
- Oracle (68)
- FLEX (19)
- Tools (19)
- 设计模式 (4)
- Database (12)
- SQL Server (9)
- 例子程序 (4)
- mysql (2)
- Web Services (4)
- 面试 (8)
- 嵌入式/移动开发 (18)
- 软件工程/UML (15)
- C/C++ (7)
- 架构Architecture/分布式Distributed (1)
最新评论
-
a535114641:
LZ你好, 用了这个方法后子页面里的JS方法就全不能用了呀
页面局部刷新的两种方式:form+iframe 和 ajax -
di1984HIT:
学习了,真不错,做个记号啊
Machine Learning -
赵师傅临死前:
我一台老机器,myeclipse9 + FB3.5 可以正常使 ...
myeclipse 10 安装 flash builder 4.6 -
Wu_Jiang:
触发时间在将来的某个时间 但是第一次触发的时间超出了失效时间, ...
Based on configured schedule, the given trigger will never fire. -
cylove007:
找了好久,顶你
Editable Select 可编辑select
Gerrit Code Review for Git:
http://gerrit-documentation.googlecode.com/svn/Documentation/2.4.2/index.html
git post of mine:
http://wuaner.iteye.com/blog/1681983
Git workflow:
http://nvie.com/posts/a-successful-git-branching-model/
http://danielkummer.github.io/git-flow-cheatsheet/
https://www.atlassian.com/git/tutorials/comparing-workflows
http://scottchacon.com/2011/08/31/github-flow.html
http://openwares.net/linux/git_brantch_model.html
http://openwares.net/linux/gerrit_workflow.html
权限控制:
http://openwares.net/linux/gerrit_privilege_setup.html
Rebase or Merge for team workflows? that's a problem:
http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs-merge-questions
http://stackoverflow.com/questions/804115/when-do-you-use-git-rebase-instead-of-git-merge
http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/
ssh 登录注意事项:
http://support.suso.com/supki/SSH_Tutorial_for_Linux
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-in-ubuntu
gerrit不允许你使用
http://stackoverflow.com/questions/10461214/why-do-git-push-gerrit-headrefs-for-master-instead-of-git-push-origin-master
gerrit 下也可以拿到别人提交的、尚未被review的commit对象(通过 refs/changes):
对纯使用git的push,push完后本地的remote-tracking branch(如origin/master)会自动的moving到与当前的tracking branch(如master分支)相同的位置(都指向最新的commit对象);但是使用gerrit,做完 ”git push origin HEAD:refs/for/master“后,本地的remote-tracking branch不会移动,仍然保持在原来的指向,致使git status总是提示:
之所以出现这种问题,其实上面的图就说明了一切:你push入的是一个叫做padding changes的区域,push的commit对象是要被review通过才能进入到Authoritative Repository里的;而你fetch/pull取的是Authoritative Repository里的东西。
Problems Summary:
1 checkout remote的一个分支,本地出现了一个叫做(no branch)的分支,并且HEAD指向了它:
(no branch)表示当前HEAD指针没有指向任何一个branch的 tip,是一个detached HEAD,关于detached HEAD详见本博git篇。
origin/master是remote-tracking branch(有时候简称为remote branch),是origin这个remote Reop的master分支(某一时期)的状态在你本地Repo中的体现;remote-tracking branch与local branch的区别在于,remote-tracking branch对你来说是只读的(而local branch是可写的(可写自然也可读))
http://stackoverflow.com/questions/2498458/why-did-git-set-us-on-no-branch
所以正确的做法应该是checkout -b(或checkout --track) 到一个Local branch:
2
http://gerrit-documentation.googlecode.com/svn/Documentation/2.4.2/user-changeid.html#_creation
http://stackoverflow.com/questions/8845658/gerrit-error-when-change-id-in-commit-messages-are-missing
出现该错误的原因是gerrit server端配置了每个commit的message里必须有Change-Id(is a SHA1 of the first version of the reviewed commit)。
解决方法:通过 git commit --amend -m 或 git rebase -i 修改commit message,使其包含Change-Id信息。
为避免再次发生,需要为本地的git repo添加一个commit-msg hook:
commit-msg hook的添加方法两种:
使用commit --amend时如果加了 -m 参数,commit-msg hook会为该commit生成一个新的Change-Id;所以,gerrit下做提交不要git commit --amend -m,因为这样新的commit对象会有不同的change-Id,而gerrit服务器是通过change-Id区别commit对象的;请使用git commit --amend(没有-m参数),并不要改变编辑窗口中的change-Id。
3 gerrit 报错: "you are not allowed to upload merges"
如果你是直接在本地的master分支上做commit,并且当前master is ahead of origin/master,则当你git pull,且有别人的commit被从remote那下来,git自然会尝试合并你master当前所在的commit和pull下来的remote commit(因为使用的是pull嘛),从而生成一个新的merge之后的commit对象,master这个local branch指向它,这个merge出来的commit对象是没有change-id的。需要说明的是,gerrit不允许你直接push merge出来的commit对象,即使你通过git commit --amend为它生成了gerrit提交需要的change-id(起码在我所在的工作环境下gerrit服务器是这样配置的,不过这个选项应该是可以在gerrit服务器端配置的)。所以如果你尝试push该merge出来的commit对象,就会报上面的错误:
http://gerrit.googlecode.com/svn/documentation/2.2.1/error-not-allowed-to-upload-merges.html
4 gerrit 报错:"change <change-id_of_commit> closed"
报这个错误的原因是因为你提交的commit对象的change-id同一个已经merge入 gerrit remote repo master分支的commit对象有相同的change-id。之所以出现这种有相同change-id的情况,可能是因为你本地曾经基于repo master分支的那个commit对象作为commit --amend操作:
http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-change-closed.html
5 gerrit 下,是不可以直接通过 git push 命令新建 remote branch 的;如果想要为由 gerrit 管理的项目新建 remote branch,需要有相应权限的人,在 gerrit 的 admin UI(即http://review.example.com) 的 Projects -> nameOfProject -> Branches 下通过点 Create Branches 来做。远程分支一旦建立起来,client唯一需要做的,就是在 master 分支下通过 git pull 将该新建的 remote branch 拿下来。如果想提交某 commit对象 到新建的 remote branch 下,同 git push origin HEAD:refs/for/master 一样,只需指定该新建的 remote branch 作为 push 的目标即可:
http://gerrit-documentation.googlecode.com/svn/Documentation/2.4.2/index.html
git post of mine:
http://wuaner.iteye.com/blog/1681983
Git workflow:
http://nvie.com/posts/a-successful-git-branching-model/
http://danielkummer.github.io/git-flow-cheatsheet/
https://www.atlassian.com/git/tutorials/comparing-workflows
http://scottchacon.com/2011/08/31/github-flow.html
http://openwares.net/linux/git_brantch_model.html
http://openwares.net/linux/gerrit_workflow.html
权限控制:
http://openwares.net/linux/gerrit_privilege_setup.html
Rebase or Merge for team workflows? that's a problem:
http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs-merge-questions
http://stackoverflow.com/questions/804115/when-do-you-use-git-rebase-instead-of-git-merge
http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/
ssh 登录注意事项:
# 生成 ssh public & private keys (一路回车即可): $ ssh-keygen -t rsa # cat ~/.ssh/id_rsa.pub 的内容,将结果拷到 gerrit - settings - "SSH public keys": $ cat ~/.ssh/id_rsa.pub # 你的 id_rsa.pub 的内容应该已经被追加到了远程 gerrit server 上的 ~/.ssh/authorized_keys 中。对远程主机上的 authorized_keys 文件,确保除当前用户外无任何其他用户拥有对该文件的写权限(在 ubuntu 下同组用户会拥有写权限)。否则更改其权限(原因见 man sshd -> If this file(~/.ssh/authorized_keys), the ~/.ssh directory, or the user's home directory are writable by other users, then the file could be modified or replaced by unauthorized users. In this case, sshd will not allow it to be used unless the StrictModes option has been set to “no” ): $ chmod g-w(或 600 也可, 总之确保其他用户无写权限,另外注意是检查 gerrit server 上的 authorized_keys,不是在你本地创建/检查这个文件!) ~/.ssh/authorized_keys # 做完上面这些后,如果通过 ssh clone 项目时报 Agent admitted failure to sign using the key,原因是刚生成的私钥尚未被 sshd 认可。此时的解决办法可以是重启系统,也可以是通过调用下面的脚本将刚生成的私钥手动添加到认可的私钥列表中(参见:http://www.cyberciti.biz/faq/unix-appleosx-linux-bsd-agent-admitted-failuretosignusingkey/): $ ssh-add # 查看 gerrit server 对外开放的端口号(默认为 29418) $ curl http://hostOfGerritServer:port/ssh_info # Test SSH authentication to gerrit server $ ssh -vv -p 29418 usernameOfGerritAccount@hostOfGerritServer关于 SSH 参考:
http://support.suso.com/supki/SSH_Tutorial_for_Linux
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-in-ubuntu
引用
Your public key can be put on the machines you want to connect to in a file called .ssh/authorized_keys
Host host_x.y
User userOf[192.168.x.y]
Hostname 192.168.x.y
IdentityFile ~/.ssh/id_rsa
# 如果想要 ssh localhost,在本地需要: $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys为了通过 ssh 免密码登陆远程主机 192.168.x.y,可以通过配置 config 的方式。一个典型的 ~/.ssh/config 配置:
Host host_x.y
User userOf[192.168.x.y]
Hostname 192.168.x.y
IdentityFile ~/.ssh/id_rsa
# 使用 ssh-copy-id 将本地的 id_rsa.pub 追加到远程主机的 ~/.ssh/authorized_keys 文件中: $ ssh-copy-id userOfRemoteHost@192.168.x.y
gerrit不允许你使用
git push origin master将本地的tracking brancn直接bush到Remote Repo的master分支,你需要使用
git push origin HEAD:refs/for/master做push操作。
http://stackoverflow.com/questions/10461214/why-do-git-push-gerrit-headrefs-for-master-instead-of-git-push-origin-master
gerrit 下也可以拿到别人提交的、尚未被review的commit对象(通过 refs/changes):
$ git fetch ssh://xxx@review.yyy.com:29418/projectName refs/changes/79/3179/3 && git checkout FETCH_HEAD $ git checkout -b <a_new_branch_point_to_unreviewd_commit>
对纯使用git的push,push完后本地的remote-tracking branch(如origin/master)会自动的moving到与当前的tracking branch(如master分支)相同的位置(都指向最新的commit对象);但是使用gerrit,做完 ”git push origin HEAD:refs/for/master“后,本地的remote-tracking branch不会移动,仍然保持在原来的指向,致使git status总是提示:
Your branch is ahead of 'origin/master' by X commit必须等有相应权限的reviewer review并批准了你的commit后,你才能在本地通过fetch/pull origin来使remote-tracking branch移动。(在未被review&批准前,你fetch/pull是无法让其移动的。)
之所以出现这种问题,其实上面的图就说明了一切:你push入的是一个叫做padding changes的区域,push的commit对象是要被review通过才能进入到Authoritative Repository里的;而你fetch/pull取的是Authoritative Repository里的东西。
Problems Summary:
1 checkout remote的一个分支,本地出现了一个叫做(no branch)的分支,并且HEAD指向了它:
$ git checkout origin/master说明:
(no branch)表示当前HEAD指针没有指向任何一个branch的 tip,是一个detached HEAD,关于detached HEAD详见本博git篇。
origin/master是remote-tracking branch(有时候简称为remote branch),是origin这个remote Reop的master分支(某一时期)的状态在你本地Repo中的体现;remote-tracking branch与local branch的区别在于,remote-tracking branch对你来说是只读的(而local branch是可写的(可写自然也可读))
http://stackoverflow.com/questions/2498458/why-did-git-set-us-on-no-branch
所以正确的做法应该是checkout -b(或checkout --track) 到一个Local branch:
$ git checkout -b aBranch origin/master #本地已有一个clone来的master分支的话,则--track的方式是不行的,因为名为master的local branch已存在: $ git checkout --track origin/master
2
$ git push origin HEAD:refs/for/master时出现错误:
missing Change-Id in commit message。http://gerrit-documentation.googlecode.com/svn/Documentation/2.4.2/error-missing-changeid.html
http://gerrit-documentation.googlecode.com/svn/Documentation/2.4.2/user-changeid.html#_creation
http://stackoverflow.com/questions/8845658/gerrit-error-when-change-id-in-commit-messages-are-missing
出现该错误的原因是gerrit server端配置了每个commit的message里必须有Change-Id(is a SHA1 of the first version of the reviewed commit)。
解决方法:通过 git commit --amend -m 或 git rebase -i 修改commit message,使其包含Change-Id信息。
Add more ignores in .gitignore Change-Id: I849fc7309f25eb4175fce67418e177a1bc5555ae
为避免再次发生,需要为本地的git repo添加一个commit-msg hook:
引用
关于git hooks:钩子(hooks)是一些在"$GIT-DIR/hooks"目录的脚本, 在被特定的事件(certain points)触发后被调用。当"git init"命令被调用后, 一些非常有用的示例钩子文件(hooks)被拷到新仓库的hooks目录中; 但是在默认情况下这些钩子(hooks)是不生效的。 把这些钩子文件(hooks)的".sample"文件名后缀去掉就可以使它们生效了。
commit-msg hook的添加方法两种:
$ scp -p -P 29418 john.doe@review.example.com:hooks/commit-msg .git/hooks/ $ curl http://review.example.com/tools/hooks/commit-msg在.got/hooks/目录下添加完hook文件后,一定记得将该文件的权限设为可执行!否则会出现hook文件不起作用的问题。
使用commit --amend时如果加了 -m 参数,commit-msg hook会为该commit生成一个新的Change-Id;所以,gerrit下做提交不要git commit --amend -m,因为这样新的commit对象会有不同的change-Id,而gerrit服务器是通过change-Id区别commit对象的;请使用git commit --amend(没有-m参数),并不要改变编辑窗口中的change-Id。
引用
Rule of a thumb: Don't use --amend -m with gerrit:
http://stackoverflow.com/questions/7893854/gerrit-recreating-change-ids
http://stackoverflow.com/questions/7893854/gerrit-recreating-change-ids
3 gerrit 报错: "you are not allowed to upload merges"
如果你是直接在本地的master分支上做commit,并且当前master is ahead of origin/master,则当你git pull,且有别人的commit被从remote那下来,git自然会尝试合并你master当前所在的commit和pull下来的remote commit(因为使用的是pull嘛),从而生成一个新的merge之后的commit对象,master这个local branch指向它,这个merge出来的commit对象是没有change-id的。需要说明的是,gerrit不允许你直接push merge出来的commit对象,即使你通过git commit --amend为它生成了gerrit提交需要的change-id(起码在我所在的工作环境下gerrit服务器是这样配置的,不过这个选项应该是可以在gerrit服务器端配置的)。所以如果你尝试push该merge出来的commit对象,就会报上面的错误:
http://gerrit.googlecode.com/svn/documentation/2.2.1/error-not-allowed-to-upload-merges.html
4 gerrit 报错:"change <change-id_of_commit> closed"
报这个错误的原因是因为你提交的commit对象的change-id同一个已经merge入 gerrit remote repo master分支的commit对象有相同的change-id。之所以出现这种有相同change-id的情况,可能是因为你本地曾经基于repo master分支的那个commit对象作为commit --amend操作:
http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-change-closed.html
5 gerrit 下,是不可以直接通过 git push 命令新建 remote branch 的;如果想要为由 gerrit 管理的项目新建 remote branch,需要有相应权限的人,在 gerrit 的 admin UI(即http://review.example.com) 的 Projects -> nameOfProject -> Branches 下通过点 Create Branches 来做。远程分支一旦建立起来,client唯一需要做的,就是在 master 分支下通过 git pull 将该新建的 remote branch 拿下来。如果想提交某 commit对象 到新建的 remote branch 下,同 git push origin HEAD:refs/for/master 一样,只需指定该新建的 remote branch 作为 push 的目标即可:
# 假设新建的 remote branch 在本地的 remote-tracking branch 叫 remotes/origin/bugfix git push origin HEAD:refs/for/bugfix
发表评论
-
Authentication & Authorization & Access Control - OAuth 2.0 & ABAC
2016-04-08 16:14 1594Access Control RBAC(role-b ... -
Virtualization & Docker
2016-03-23 09:43 661Docker up & running: 引用A co ... -
Scala
2014-09-30 11:31 1156twitter 的 scala 教程: Scala S ... -
M2M & IoT: MQTT
2014-09-25 11:42 1343Pract ... -
Lucene & Solr
2013-05-07 17:30 2421Params of solr query (参见 solrj ... -
Ruby
2013-03-31 00:44 1219Ruby on Rails Tutorial: http:// ... -
Spring Integration
2013-03-26 16:52 3042Spring Integration Reference ... -
Open Source Explosion
2013-03-19 13:55 1243好用的开源java第三方开源包: rapid-framewor ... -
python
2013-03-19 12:15 1273Python documentation, include T ... -
Linux File System | linux文件系统
2013-02-01 17:54 1646Unix Filesystem Hierarchy S ... -
Ubuntu 使用杂摘
2012-10-19 23:51 2129Useful Shortcut Keys In Ubun ... -
Git : Distributed version control system
2012-09-20 09:59 6159Srcs : Git Reference http://gi ... -
Linux 下 解释性的语言 - shell
2012-09-04 23:57 1634Shell Scripts are collect ... -
未完 Regular Expressions | 正则表达式
2011-08-25 11:43 1528Extended Regular Expression ... -
lDAP 轻量级目录访问协议
2010-03-22 07:56 1493LDAP Basics: http://www.d ... -
Vim & Emacs
2009-11-23 00:30 1741精读: Learn Vim Progressively ... -
用信号量机制来实现多个进程对临界资源的互斥访问 & PV操作
2009-11-21 13:55 11337进程互斥 定义:两个或两个以上的进程,不能同时进入关于同一组 ... -
Linux启动过程剖析
2009-11-12 22:36 1418http://student.csdn.net/space.p ... -
未完 Guava
2009-08-25 23:17 1267集合工具:引用 List&l ... -
Linux 与 Java
2009-07-30 09:21 1299Ubuntu 12.04 下安装配置 JDK: htt ...
相关推荐
Gerrit Code Review 网页版代码走查工具。Gerrit Code Review is a web-based code review tool built on Git version control.
文档主要介绍git gerrit repo的基本功能,及搭建流程和代码评审流程
Git 代码服务器搭建 ...2. 配置 Gerrit:使用 `vim /etc/gerrit/gerrit.config` 配置 Gerrit,以便实现代码评审。 至此,一个完整的代码服务器已经搭建完成!读者可以根据需要添加组成员、配置权限和实现代码评审。
agile methodologies that worked well enough with co-located teams now need to be empowered with additional tools such as Gerrit code review to allow the developers to share, discuss, and cooperate in...
最后,你可以在本地创建一个Git仓库,添加Gerrit作为远程仓库,然后通过`git push --review`将代码推送到Gerrit进行审核。其他团队成员可以登录到Gerrit Web界面,查看代码并进行评论,直到代码被批准并合并。 总结...
Gerrit is a code review and project management tool for Git based projects.附件是最新版本gerrit的源码,可以进行源码的直接安装。
18年7月更新,清华镜像,完美解决 Yocto,Android fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle 错误,绕开GFW
Ubuntu 18.04_ Install Gerrit for Git code review ubuntu 上部署 gerrit 服务器 , 使用 apache2 作为web端, 可手动设置用户名密码.
高山基地openfrontier / gerrit:最新-> 3.3.2 openfrontier / gerrit:3.2.x-> 3.2.7 openfrontier / gerrit:3.1.x-> 3.1.12 openfrontier / gerrit:3.0.x-> 3.0.15 openfrontier / gerrit:2.16.x-> 2.16.26 ...
gerrit依赖,用于安装gerrit环境。 下载:jdk-8u181-linux-x64.tar.gz http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装:sudo tar zxvf ./jdk-8u181-linux-x64.tar.gz -...
3. Push 到 Gerrit:使用 Git 命令 Push 变更到 Gerrit 服务器。 4. Egit 没有 Gerrit 选项:在本地仓库目录下,使用 scp 命令将 commit-msg钩子脚本下载到本地仓库。 三、Gerrit 中查看变更 1. 查看变更记录:...
詹金斯的Gerrit Code Review插件 该插件允许将任何Jenkins多分支管道与无缝集成,以进行分支和更改验证。 为什么还有另一个插件? 我想将Gerrit CI验证工作流程用于任何项目,包括Gerrit插件或任何其他想要采用它...
Gerrit是一款开源的代码审查和分支管理系统,它基于Git版本控制系统,旨在简化代码的审查流程,提升软件开发团队的工作效率。本压缩包文件“Gerrit source code”包含了Gerrit项目的源代码,这对于开发者深入理解...
### Git/Gerrit 手册知识点详述 #### 一、Git 介绍 - **分布式特性**:Git 是一种分布式版本控制系统,这意味着每个开发者的工作副本实际上就是一个完整的仓库。这种设计方式消除了传统的客户端/服务器模式,使得...
代码审查(Code Review)是一种系统性的检查计算机源代码的过程,旨在发现并修正开发初期可能被忽视的错误,从而提高软件的整体质量和开发人员的技术水平。根据维基百科定义,代码审查可以分为多种类型,包括但不...
Gerrit Code Review是一款强大的代码审查系统,专为开源软件项目和企业级开发团队设计。它的核心功能是提供了一个基于Web的界面,让开发者能够方便地进行代码审查、讨论和合并请求。Gerrit-2.14.6是这个系统的特定...
GIT+Gerrit+Jenkins基础操作
[Packt Publishing] Learning Gerrit Code Review (E-Book) ☆ 图书概要:☆ Leverage the power of Gerrit Code Review to make software development more cooperative and social Overview Understand the ...
7. 安装Gerrit:Gerrit的安装通常涉及下载最新版本的Gerrit发布包,解压后按照官方文档的步骤配置。这包括设置Java环境、修改`gerrit.config`配置文件、启动Gerrit服务等。 8. 配置Gerrit:在`gerrit.config`中,你...