当前位置:   article > 正文

gerrit 配置使用_gerrit during git-upload-pack

gerrit during git-upload-pack

Gerrit的配置使用

目 录 1. 快速配置 ................................................................. 3

 1.1 创建APACHE帐号名 ......................................................... 3

1.2 创建SSH密钥 ............................................................. 3

 1.3 登录GERRIT WEBUI ......................................................... 3

1.4 注册邮件加入公钥 ...................................................... 3

 1.5 测试你的客户端 .......................................................... 5

1.6 查看项目和组 ............................................................ 5

 2. 快速上手的操作流程 ....................................................... 6

 2.1 通过SSH获取一个项目.................................................... 6

2.2 拷贝COMMIT-MSG和GERRIT-CHERRY-PICK ..................................... 6

2.3 开发并提交一个待评审的变更 .............................................. 6

2.4 评审人及相关人收到邮件通知 .............................................. 6

2.5 评审人或相关人评审变更 .................................................. 7

2.6 提交变更 ............................................................... 8

2.7 冲突发生时 ............................................................. 8

3. 基本操作 ................................................................. 9

3.1 创建一个项目到GERRIT ................................................... 9

3.1.1 客户端使用SSH创建 ................................................... 9

3.1.2 服务器本地创建方法 ................................................... 9

3.2 查询变更 .............................................................. 10

3.2.1 基本搜索操作符 ...................................................... 11

3.2.2 BOOLEAN 操作符 ........................................................ 11

 3.2.3 LABEL操作符 ........................................................... 11

3.3 上传变更 .............................................................. 11

3.3.1 CHANGE-ID ............................................................. 11

 3.3.2 GIT PUSH提交待审核的变更 .............................................. 12

 3.3.3 GIT PUSH直接提交变更到仓库 ............................................ 12

 3.3.4 使用REPO UPLOAD创建待审核变更 ....................................... 12

3.4 命令行工具 ............................................................ 12

 3.5 管理员工具 ............................................................ 12

3.6 权限控制主要译自官方文档 ........................................... 13

3.7 变更提交评审时邮件通知 ................................................. 14

 1. 快速配置

1.1 创建apache帐号名 产生一个登录帐号ethanzhao htpasswd -c ethanzhao_account.txt ethanzhao 该命令创建了一个ethanzhao_password.txt的”用户:密码”对用于登录Gerrit。 请将此文件拷贝到192.168.1.24publicgerrit_account里邮件通知系统管理员加入访问权限。目前请将发邮件给我 ethan.zhaoebensz.com负责加入指出apache2帐号文件的位置。

1.2 创建ssh密钥 1 ssh-keygen -t rsa 一路回车后产生了ssh密钥位于/.ssh/id_rsa id_rsa.pub 2 创建/.ssh/config内容如下 Host et User ethanzhao Groups显示所有的组用户也可以在此创建一个新组。

 2. 快速上手的操作流程

2.1 通过SSH获取一个项目 git clone ssh://192.168.1.21:29418/test.git

2.2 拷贝commit-msg和gerrit-cherry-pick scp -p -P 29418 192.168.1.21:hooks/commit-msg .git/hooks scp -p -P 29418 192.168.1.21:bin/gerrit-cherry-pick /bin 如果/bin未加入环境变更中请修改.bashrc加入export PATH/bin:PATH 该commit-msg 主要用来产生 Change-Id行详细的解释见下文。

2.3 开发并提交一个待评审的变更 cd test echo a test.c 或vi test.c进行更改。 git add test.c git commit -am test.c added git push origin HEAD:refs/for/master 如果通知到给出评审者或相关人员请使用 git push --receive-packgit receive-pack --reviewergitadminebensz.com --ccethan.zhaoebensz.com origin HEAD:refs/for/master关于这一点后面将解释并介绍一种比较好的办法来简化这个操作。 refs/for/branch是一个神奇的分支所有提待评审的提交都是提交到这种分支上如上句是提交到master上待评审如果是experiment分支则是refs/for/experiment 如果使用

2.4 评审人及相关人收到邮件通知 7 / 15

2.5 评审人或相关人评审变更 此时gitadmin登录Gerrit WebUI通过All-Open会查看到这个待评审的变更。点击该变更后显示出详情如下 具有评审权限的人点击Review按钮后进入评审界面 8 / 15

2.6 提交变更 此时回到Change详情面时会有如下的Verified和Code Review的绿色勾选则表示该变更审核通过可以提交只有有提交权限的人才可以提交变更。

2.7 冲突发生时 一个示例 用户git修改test.c并完成一次提交该提交待评审。 git commit -am line5 by git git push origin HEAD:refs/for/master 因git 提交待评审服务器仓库无变化Ethan与服务器更新时并不知晓git的变更。其修改文件如下并也完成了一次提交。 line4 line5 by git 9 / 15 git commit -am line5 by ethan git push origin HEAD:refs/for/master Reviewer首先评审git的提交通过后提交到了服务器上。后来再评审了Ethan的内容也没有问题也准备提交这时由于冲突服务器拒绝并给出建议 用户需要在客户端解决冲突stash or rebase并重新提交。

3. 基本操作

3.1 创建一个项目到Gerrit

3.1.1 客户端使用ssh创建 ssh -p 29418 ssh://192.168.1.21 gerrit create-project --name test --empty-commit 注意--empty-commit是必要的否则无法使用checkout master bug

3.1.2 服务器本地创建方法 服务器端使用review_site站点的户主如gerrit2直接在仓库位置下创建test2.git仓库。 git --git-dir/home/gerrit2/review_site/git/test2.git init 目前发现直接创建的项目在设置Admin-Projects-Access时会出现如下的访问错误 分析原因主要是此时创建的项目test2.git并未注册到Gerrit的数据库reviewdb上此时点击Admin-Projects-test2-Access时会出现如下错误对话框原因是未将test2注册到reviewdb数据里。 对于这个问题Gerrit2.2.1与2.1有不同的解决方法。 1 2.1.7以前版本方法是使用一条Insert语句将其注册到projects表中。 当使使用内嵌H2数据库 ssh -p 29418 192.168.1.21 gerrit gsql INSERT INTO projects use_contributor_agreements submit_type name VALUES line4 line5 by ethan 10 / 15 N M test2 当使使用内嵌mysql数据库时 mysql -u root -p mysql use reviewdb mysql INSERT INTO projectsproject_iduse_contributor_agreementssubmit_typename VALUESnextval_project_idNM./test2 2 2.2.1有一个bug创建后不能使用AdminProjectstest2Access设权限解决方法如下参见http://code.google.com/p/gerrit/issues/detailid1000。 1 All projects里添加refs/meta/config的Push权限 可选 2 以建立review_site的用户身份gerrit2克隆git clone /home/git/repositories/test2.git/ 3 修改.git/config 加入 fetch refs/meta/:refs/meta/行到remote origin 部分。 4 创建project.config内容为 access refs/ owner group Registered Users 5 创建文件groups内容为注意Registered-Users 和Registered Users之间为Tab而非空格 global:Registered-Users Registered Users 6 git add . git commit -am add project access 7 git push origin HEAD:refs/meta/config 8 /review_site/bin/gerrit.sh restart 9 登录webUI移除Owner为Registered Users 可以用这种方法处理多个project的访问权限问题如 git push /home/gerrit2/review_site/git/repotest/project1.git HEAD:refs/meta/config git push /home/gerrit2/review_site/git/repotest/project2.git HEAD:refs/meta/config

 3.2 查询变更 典型的查询变更界面是通过All菜单到达的。例如单击All下的Merged则搜索所有已经合并后变更。此项操作等同于在右上角搜索框内输入status:merged查询的操作。

3.2.1 基本搜索操作符 owner:Ethan Zhao project:test 11 / 15 has:star 或者is:starred is:watched当变更与当前用户之一设置的water过滤器匹配时 Settings-Watched Projects:设置test为watched则输入“is:watched”可搜索出处理watched中的项目变更。

3.2.2 Boolean 操作符 可以使用“-”“AND”“OR”来确定搜索条件。 “-“ 取反相当于NOT的意思例如 “-is:starred” OR 取或例如owner:git OR owner:Ethan AND取与例如owner:Ethan Zhao AND reviewer:git

3.2.3 Label操作符 label:CodeReview2 label:Verified-1 label操作符用于查找那些处于code review过程中的变更所获得的分数根据服务器的配置可能有不同的标签但CodeReview和Verified是两个默认怎不自带的标签。

3.3 上传变更

3.3.1 Change-Id Gerrit提供了一个commit-msg hook每次当git commit时它都会自动创建并插入一个独一无二的Change-Id行。其安装方法如前述。 scp -p -P 29418 192.168.1.21:hooks/commit-msg .git/hooks 安装成功后每次提交后的log如下多出一个Change-Id的行 Gerrit识别该Change-Id Gerrit会自动更新相同的Change-Id的提交内容amend rebasesquashcherry-pick Amending a commit使用git commit –amend提交时保留Change-Id不变Gerrit会自动更新该提交内容 Rebasing a commitRebase一个提交时保留Change-Id不变Gerrit会自动更新使用rebased提交 Squashing commits压缩多个提交到一起保留其中一个Change-Id行Gerrit会识别出来。用户需要在Gerrit Web界面里手动丢弃其它的变更。 Cherry-picking a commit当进行cherry pick时保留Change-Id这样Gerrit视cherry-picked commit为一个已有变更的替换这对于某个项目为fast-forward-only合并策略会非常有用。

 3.3.2 git push提交待审核的变更 12 / 15 git push创建待审核的变更到到Gerrit这种方式的操作是git push URL refs/for/branch 直接提交变更到仓库Bypass Gerrit

3.3.3 git push直接提交变更到仓库 git push可以绕过审核Bypass review以达到创建分支、标签和提交等 refs/heads/ 直接push创建分支。push用户需要打开Push分支权限 refs/tags/:直接push创建标签。push用户需要打开Push标签权限Push Annotated Tag refs/直接push提交

3.3.4 使用repo upload创建待审核变更

3.4 命令行工具 git upload-packGit服务器端命令当客户端使用git fetch时就连接到服务器端的upload-pack进程。 git receive-packGit服务器端命令当客户端使用git push时连接到远端的receiver-pack协商通信 gerrit approve或者gerrit review:验证同意和/或提交一个一个补丁集 gerrit ls-projects查询所有使用者可以看到的project

3.5 管理员工具 gerrit create-account创建一个新的内部用户帐号。 例如cat /ez_watcher.pub ssh -p 29418 192.168.1.21 gerrit create-account --ssh-key – watcher 这样使用ez_watcher.pub创建了一个用户watcher。 在客户端测试先要建立一个/.ssh/config的文件 内容见图 但使用HTTP鉴权情况下该方式创建的帐号能获取代码进行开发。但沿无法登录HTTP界面因为apache2使用自己的用户帐号。 gerrit create-project创建一个Gerrit管理的项目 ssh -p 29418 ssh://192.168.1.21 gerrit create-project --name test --empty-commit gerrit create-group创建一个组。下面的示例创建一个Integrators的组包含成员git和Ethan ssh -p 29418 192.168.1.21 gerrit create-group --member git --member Ethan Integrators gerrit gsql已激活的数据库管理接口可执行包括SELECT UPDATE INSERT DELETE和ALTER等所有的SQL语句。例如ssh git gerrit gsql即ssh -p 29418 git192.168.1.21 gerrit gsql 13 / 15 gerrit show-connections: 显示ssh -p 29418 git192.168.1.21 gerrit show-connections

3.6 权限控制主要译自官方文档 Gerrit的权限控制是基于组策略的。每个用户隶属于一个或多个组。Gerrit权限不对用户直接开放。 1系统组 Administrators该组内用户可以执行Admin菜单下的Project和Group所有设置行为。该组内用户并不直接拥有项目代码审核批准或提交权限。在这一点上它与其它通用组里的用户没什么两样。 Anonymous Users所有用户都自动为该组成员未登录用户也属于该组。所有授权给该组的权限将被所有用户继承。Administrators或项目Owner可以授予访问权限给这个组以使该组内成员可以不必要登录即可查看变更变化。通常仅仅授权为Read。 Registered Users所有登录的用户均属于该组。当使用OpenID身份验证时用户变成Registered Users非常容易因此授权给这个组时应该要小心。典型的做法是将“Code Review -1..1”分配给该组。允许他们对变更发表意见vote a change但不具备接受或拒绝一个变更的权限。Registered Users对于所有有Read权限的项目的任何变更都有发表评论的权力。 Project Owners:被授予该组的访问权限总是在一个项目的上下文内被评估并转换成所有拥用该项目的用户的权限。 2权限控制列表 用户属于多个组则享受最大化权利的原则。 权限设置可以是一个常规的引用名空间或通配符表示的多个引用名空间如refs/heads/master仅匹配master分支或者refs/heads/则匹配多个分支refs/heads/master和refs/heads/test等。 引用名字也可以是个正式表达式前缀如refs/heads/a-z18表示匹配所有名称为小写且长度在18个字符之间的分支。“.”可以匹配任何单个字符。 引用名还可以自动包括当前用户实现动态权限去匹配当前登录的用户。例如refs/heads/sandbox/username/允许用户joe使用refs/heads/sandbox/joe/foo。 Gerrit使用”访问权限所有集”来评估一个用户的引用级访问来决定其的访问权限。如下表Foo Leads未被明确授予但仍然扔有refs/heads/qa的Code Review权限因为refs/heads/ Group Reference Name Category Range Registered Users refs/heads/ Code Review -1..1 Foo Leads refs/heads/ Code Review -2..2 QA Leads refs/heads/qa Code Review -2..2 Gerrit也可以支持排它型独占访问控制方法是前缀“-”号如下表Foo Leads 组的人将无法拥有“refs/heads/qa”的Code Review权限。 Group Reference Name Category Range 14 / 15 Group Reference Name Category Range Registered Users refs/heads/ Code Review -1..1 Foo Leads refs/heads/ Code Review -2..2 QA Leads -refs/heads/qa Code Review -2..2 为了使得Foo Leads 组的成员有“refs/heads/qa”的Code Review权限需要特别的增加一行如下表 Group Reference Name Category Range Registered Users refs/heads/ Code Review -1..1 Foo Leads refs/heads/ Code Review -2..2 QA Leads -refs/heads/qa Code Review -2..2 Foo Leads refs/heads/qa Code Review -2..2 3All-Projects项目 All Projects该项目为Gerrit创建默认为是所有后建项目的父项目其默认权限如下。根据子项目继承父项目权限的规则。这些权限被后期建立的所有的项目继承。 只有Administrators组内成员可以修改这个项目的权限控制。 该项目的所有权不能被授予给其它组。否则被授权组将近乎拥有和Administrators组员相同的访问权限。默认的All-Projects权限如下

3.7 变更提交评审时邮件通知 1命令行方式 git push --receive-packgit receive-pack --reviewergitadminebensz.com --ccethan.zhaoebensz.com origin HEAD:refs/for/master 2配置.git/config内容如下 remote origin fetch refs/heads/:refs/remotes/origin/ url ssh://192.168.1.21:29418/test.git receivepack git receive-pack --reviewergitadminebensz.com --ccethan.zhaoebensz.com push HEAD:refs/for/master 15 / 15 branch master remote origin merge refs/heads/master 即可使用“git push origin”完成提交

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/985631
推荐阅读
  

闽ICP备14008679号