092830_Git权威指南-第5篇-第32章-Gerrit
- 格式:pdf
- 大小:1.68 MB
- 文档页数:41
gerrit使用git review提交摘要:1.Gerrit 简介2.Git Review 的使用3.Gerrit 与Git Review 的结合4.使用Gerrit 提交Git Review 的具体步骤5.注意事项正文:一、Gerrit 简介Gerrit 是一个免费的、开源的代码审查工具,它可以帮助团队更有效地进行代码审查,以提高代码质量和安全性。
Gerrit 是基于Web 的,可以与Git 等版本控制系统集成,提供便捷的代码审查功能。
二、Git Review 的使用Git Review 是Git 提供的一个命令行工具,用于对本地仓库中的更改进行审查。
通过Git Review,开发者可以在将更改推送到远程仓库之前,先让审查者检查代码。
这有助于确保代码质量,并减少在合并代码时出现的冲突。
三、Gerrit 与Git Review 的结合Gerrit 可以与Git Review 结合使用,以实现更高效的代码审查。
通过将Git Review 的命令集成到Gerrit 中,开发者可以在Gerrit 界面中直接使用Git Review 的功能,而无需在命令行中执行Git Review 命令。
四、使用Gerrit 提交Git Review 的具体步骤1.首先,确保你的本地仓库已经与Gerrit 服务器进行了关联。
2.在本地仓库中,使用`git add`和`git commit`命令将更改添加到暂存区,并提交更改。
3.在Gerrit 界面中,点击“Submit a Change”按钮,打开提交更改的对话框。
4.在对话框中,选择“Git Review”选项卡,输入审查者的Git 用户名和邮箱地址。
5.点击“Submit”按钮,将更改提交给审查者进行审查。
6.审查者将通过Git Review 工具对代码进行审查,并在Gerrit 界面中留下审查意见。
7.开发者可以根据审查意见对代码进行修改,并重新提交给审查者进行审查。
GERRIT建仓规则Gerrit 是一个用于进行代码审查(Code Review)的工具,通常与 Git 版本控制系统一起使用。
Gerrit 提供了一套建仓规则,以确保在团队中对代码的变更进行一致性的审查和管理。
以下是一般情况下 Gerrit 建仓规则可能包括的一些方面:分支管理:规定项目中的主要分支(通常是master或main分支)。
限制直接推送到主要分支的权限,鼓励使用代码审查进行变更。
权限控制:制定权限规则,确保只有特定的团队成员或角色才能够进行代码审查、提交和合并。
确保只有合适的人员才能够创建新的分支或仓库。
代码审查规则:规定代码审查的工作流程,包括审查的发起、分配、评论和最终决策。
强调审查人员的责任,确保每个变更都经过审查。
提交消息规范:规范提交消息的格式,以便清晰地传达变更的目的和影响。
强调提交消息应该包括适当的描述和引用相关的问题或任务。
测试要求:规定在提交之前需要通过的测试要求,确保变更是功能上和质量上都可接受的。
可能包括自动化测试、集成测试等。
变更生命周期:定义变更的生命周期,包括变更的状态、审查进度、测试状态等。
强调变更应该经历的步骤,以确保质量和一致性。
文档和注释规范:规范代码文档和注释的格式和内容,以便团队成员可以轻松理解和维护代码。
鼓励对重要的决策、设计和实现进行文档记录。
合并规则:规定在合并变更到主分支之前需要满足的条件,例如通过所有测试、至少有一定数量的审查意见等。
确保合并是有组织的、可追溯的。
通知和报告:设置通知规则,确保团队中的成员能够及时了解变更的状态和审查的进展。
可能包括通过邮件、Slack 等方式的通知。
以上仅是一般性的建仓规则,实际规则可能会因组织、项目和团队的特殊需求而有所不同。
在使用 Gerrit 进行代码审查时,建议仔细定义和遵循相应的建仓规则,以确保代码库的管理和维护的高效性和一致性。
gerrit code review 基本功能Gerrit是一个基于Git的代码审查工具,它提供了一系列的功能来优化和简化代码审查过程。
下面将介绍Gerrit的基本功能。
1.代码审查流程管理:Gerrit提供了在代码审查过程中对变更流程进行管理的能力。
它允许团队定义和配置特定的代码审核工作流程,包括分支、状态和权限等。
2.代码审查请求:开发人员可以通过Gerrit提交代码审查请求。
这包括一组Git提交,通常是一个变更集或一个特性分支。
一旦提交,Gerrit会自动触发相应的审查过程,并通知相关审查人员参与。
3.代码审查和讨论:Gerrit为团队成员提供了一个集中的平台,可以进行代码审查和讨论。
审查人员可以对提交的代码进行行级别的审查,并在其中添加评论、建议和问题。
这有助于团队合作和提高代码质量。
4.版本控制集成:作为一个基于Git的工具,Gerrit提供了与Git版本控制系统的无缝集成。
它可以直接与Git服务器通信,检索和提交Git提交,并自动处理代码补丁、合并和冲突等。
5.权限和访问控制:Gerrit允许管理员配置细粒度的权限和访问控制规则。
这样,可以确保只有授权的人员才能执行审查操作或访问特定的代码库。
这对于保护敏感信息和确保代码安全至关重要。
6.自动化构建和测试集成:Gerrit支持与自动化构建和测试系统的集成。
它可以与持续集成工具(如Jenkins)进行集成,从而实现自动构建、测试和部署等流程。
这有助于提高开发效率和代码质量。
7.统计和报告功能:Gerrit提供了丰富的统计和报告功能,用于跟踪代码审查的进展和团队的绩效。
它可以生成各种图表和报表,包括审查周期、审查人员活动和代码质量等指标。
8.用户友好的界面:Gerrit提供了一个用户友好的Web界面,使用户可以轻松导航、搜索和查看代码库和提交的详细信息。
同时,它也提供了一组强大的过滤和排序功能,以便用户可以在大型代码库中快速找到感兴趣的变更。
第32章Gerrit 代码审核服务器谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的repo,这在前面第25章已经详细讨论过。
另外一个重要的创新就是 Gerrit ——代码审核服务器。
Gerrit 为 Git 引入的代码审核是强制性的,也就是说除非特别的授权设置,向 Git 版本库的推送必须要经过 Gerrit 服务器,修订必须经过代码审核的一套工作流之后,才可能经批准并纳入正式代码库中。
首先贡献者的代码通过 git 命令(或 repo 封装)推送到 Gerrit 管理下的 Git 版本库,推送的提交转化为一个一个的代码审核任务,审核任务可以通过refs/changes/下的引用访问到。
代码审核者可以通过 Web 界面查看审核任务、代码变更,通过 Web 界面做出通过代码审核或打回等决定。
测试者也可以通过refs/changes/之下的引用获取修订然后对其进行测试,如果测试通过就可以将该评审任务设置为校验通过(verified)。
最后经过了审核和校验的修订可以通过Gerrit 界面中的提交动作合并到版本库对应的分支中。
Android 项目网站上有一个代码贡献流程图1,详细地介绍了 Gerrit 代码审核服务器的工作流程。
翻译后的工作流程图见图32-1。
1 /source/life-of-a-patch.html图32-1:Gerrit 代码审核工作流32.1Gerrit 的实现原理Gerrit 更准确地说应该称为 Gerrit2。
因为 Android 项目最早使用的评审服务器 Gerrit 不是今天这个样子的。
最早版本的 Gerrit 是用 Python 开发运行于 Google App Engine 上的,从 Python 之父 Guido van Rossum 开发的 Rietveld 分支而来。
在这里要讨论的 Gerrit 实为 Gerrit2,是用Java 语言实现的1。
gerrit使用实例摘要:1.Gerrit简介与安装2.Gerrit基本功能与操作3.Gerrit分支策略与管理4.Gerrit代码审查与审批5.Gerrit插件与扩展6.实践中的Gerrit优化与配置7.Gerrit在国内的应用案例8.总结与展望正文:一、Gerrit简介与安装Gerrit是一款基于Web的代码审查和版本控制系统,起源于Google的内部项目。
它与Git紧密结合,允许开发者在代码提交后进行审查,以确保代码质量。
在本节中,我们将介绍Gerrit的安装过程及其基本概念。
1.安装Gerrit首先,你需要确保你的系统满足Gerrit的最低需求,如Python、Java 和Git等。
然后,你可以从Gerrit官方下载对应操作系统的安装包,并根据安装向导完成安装。
2.配置Gerrit在安装完成后,你需要对Gerrit进行基本配置,包括:设置数据库、配置SSH密钥、开启Web界面等。
详细配置过程可参考Gerrit官方文档。
3.Gerrit基本概念Gerrit主要有以下几个概念:- 项目(Project):Gerrit中的基本组织单位,包含多个分支。
- 分支(Branch):项目中的代码版本,每个分支代表一个独立的开发进度。
- 提交(Commit):代码变更的单元,包含代码和提交信息。
- 代码审查(Code Review):Gerrit的核心功能,审查者在代码提交后进行审核,给出意见和建议。
二、Gerrit基本功能与操作在了解Gerrit的基本概念后,我们可以开始学习Gerrit的具体操作。
1.创建分支在Gerrit中,你可以通过Web界面或命令行创建分支。
创建分支后,你可以在此分支上进行开发。
2.提交代码将代码上传至Gerrit仓库,生成提交。
提交时,建议附带详细的提交信息,以便于审查者了解代码变更目的。
3.发起代码审查在提交代码后,你可以将代码审查请求发送给审查者。
审查者可以在Gerrit Web界面查看代码,并给出意见和建议。
gerrit 使用方法Gerrit是一款非常流行的代码审查工具,能够帮助团队更好地管理代码质量和版本控制。
本文将介绍如何使用Gerrit来进行代码审查。
步骤一:安装Gerrit首先,需要安装Gerrit并完成配置。
Gerrit的安装可以分为两个部分:安装Java运行环境和安装Gerrit程序。
可以通过官方网站的帮助文档获得详细的安装指导。
步骤二:创建Gerrit用户一旦Gerrit安装完毕,需要创建一个Gerrit用户。
这个用户是Gerrit管理界面的主账户,用于管理Gerrit的各项设置和配置。
步骤三:项目创建和导入在Gerrit里可以进行代码审查的前提是要有代码仓库,因此需要创建或者导入一个项目。
通常情况下,项目的仓库是从Git或其他版本控制系统导入的。
Gerrit允许根据项目名称、代码仓库 URL 等信息创建或者导入一个或多个项目,具体可以参照官方文档。
步骤四:注册用户在进行代码审查之前,还需要注册一个Gerrit用户账户。
可以在Gerrit管理页面上进行用户的注册操作,填写用户昵称、用户名、电子邮件等必填信息,并按照指引完成注册。
注册完成之后,Gerrit会自动将该用户与 Git 账户相关联起来。
步骤五:创建分支接下来,需要为项目创建一个分支以便进行代码审查。
可以在Gerrit 管理页面上创建一个分支,并将其与 Git 仓库同步。
步骤六:提交变更当分支创建好后,就可以提交变更(如新增文件、修改文件内容等)了。
有两种方式可以进行提交:一是通过 Git 命令行操作,将变更导入到 Gerrit;二是在 Gerrit 管理页面上进行变更内容的发布。
步骤七:开启审查当变更被提交时,Gerrit就会自动开启一次代码审查流程。
此时,需要审核人员对变更内容进行审查,并发布审查意见。
Gerrit会自动将审查意见发送给提交人,以便进行确认。
步骤八:发布变更如果审核人员对变更内容进行了批准,那么提交人就可以发布该变更了。
gerrit工作原理Gerrit是一个基于Web的开源代码审查工具,旨在帮助开发团队进行高效的代码审查和合并工作。
它通过提供一个集中的、可跟踪的审查过程来管理软件开发中的变更。
Gerrit的核心理念是基于Git的代码审查。
它使用了Git仓库作为代码的存储和版本控制工具。
开发人员可以将代码推送到Gerrit上,并在提出合并请求之前,需要经过审查人员的审核。
审查人员可以通过在Gerrit上进行代码审查,提供反馈和建议,从而提高代码质量。
下面是Gerrit的工作原理的详细说明:1. 代码的提交和推送:开发人员使用Git命令将代码推送到Gerrit 服务器上的Git仓库。
Gerrit服务器会监听Git仓库的变更,并将这些变更存储在其内部的数据库中。
2. 代码审查:一旦代码推送到Gerrit上,审查人员将会收到通知。
他们可以通过浏览器登录到Gerrit界面,查看提交的变更。
审查人员可以对代码进行行级别的评论、提出问题和建议改进等。
他们还可以将其他开发人员邀请到代码审查中,以获取更多的意见和反馈。
3. 代码合并:一旦代码通过审查,审查人员可以将其合并到主分支中。
Gerrit使用了类似于Git的合并策略来合并代码变更。
合并后的代码将会出现在主分支中,并可供其他开发人员拉取和使用。
4. 反馈和讨论:Gerrit提供了一个集中的讨论平台,开发人员可以在每个代码审查中进行讨论和交流。
这意味着团队成员可以在提交代码之前解决问题,从而减少了错误和冲突。
5. 自动化流程:Gerrit支持一些自动化流程,例如自动化构建和部署。
通过与其他工具和持续集成/部署系统的集成,可以实现自动构建、测试和部署代码。
这些自动化流程可以帮助团队更好地管理代码的质量和可靠性。
总结来说,Gerrit的工作原理可以概括为:提交代码变更到Gerrit,邀请审查人员进行代码审查,处理审查人员的反馈和建议,合并代码到主分支,并通过讨论平台解决问题和提供反馈。
gerrit工作原理
Gerrit工作原理如下:
1. Git仓库同步:Gerrit会按照所设定的时间间隔自动同步Git仓
库中的最新版本,确保审核过程中使用的是最新版本。
2. 评审提交:开发者将代码提交到Gerrit上后,管理员会分配一个
评审人员来审核这个提交。
评审人员可以看到所有与这个提交相关的信息,包括代码、注释、修改历史等等。
如果审核通过,提交会自动合并到Git
仓库中;如果审核不通过,提交者将需要修改代码以满足评审的要求。
3. 状态管理:Gerrit会自动跟踪每次提交的状态,包括已经审核的、已经合并的和等待审核的。
管理员可以在后台设置状态,以便更好地跟踪
整个审核过程。
4. 通知和报告:Gerrit对提交的审核过程进行全面的跟踪和记录,
并及时通知相关人员有可能会影响他们的事件。
管理员可以生成各种类型
的报告,以便监控和评估整个审核过程的性能和效果。
第32章Gerrit 代码审核服务器谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的repo,这在前面第25章已经详细讨论过。
另外一个重要的创新就是 Gerrit ——代码审核服务器。
Gerrit 为 Git 引入的代码审核是强制性的,也就是说除非特别的授权设置,向 Git 版本库的推送必须要经过 Gerrit 服务器,修订必须经过代码审核的一套工作流之后,才可能经批准并纳入正式代码库中。
首先贡献者的代码通过 git 命令(或 repo 封装)推送到 Gerrit 管理下的 Git 版本库,推送的提交转化为一个一个的代码审核任务,审核任务可以通过refs/changes/下的引用访问到。
代码审核者可以通过 Web 界面查看审核任务、代码变更,通过 Web 界面做出通过代码审核或打回等决定。
测试者也可以通过refs/changes/之下的引用获取修订然后对其进行测试,如果测试通过就可以将该评审任务设置为校验通过(verified)。
最后经过了审核和校验的修订可以通过Gerrit 界面中的提交动作合并到版本库对应的分支中。
Android 项目网站上有一个代码贡献流程图1,详细地介绍了 Gerrit 代码审核服务器的工作流程。
翻译后的工作流程图见图32-1。
1 /source/life-of-a-patch.html图32-1:Gerrit 代码审核工作流32.1Gerrit 的实现原理Gerrit 更准确地说应该称为 Gerrit2。
因为 Android 项目最早使用的评审服务器 Gerrit 不是今天这个样子的。
最早版本的 Gerrit 是用 Python 开发运行于 Google App Engine 上的,从 Python 之父 Guido van Rossum 开发的 Rietveld 分支而来。
在这里要讨论的 Gerrit 实为 Gerrit2,是用Java 语言实现的1。
1.SSH 协议的 Git 服务器Gerrit 本身基于 SSH 协议实现了一套 Git 服务器,这样就可以对 Git 数据推送进行更为精确的控制,为强制审核的实现建立了基础。
Gerrit 提供的 Git 服务的端口并非标准的 22 端口,默认是 29418 端口。
这个端口是可以被发现的,当访问 Gerrit 的 Web 界面时可以得到这个端口。
对 Android 项目的代码审核服务器,访问https:///ssh_info就可以查看到 Git 服务的服务器域名和开放的端口。
下面用 curl 命令查看网页的输出。
$ curl -L -k /ssh_info 294182.特殊引用 refs/for 和 refs/changesGerrit 的 Git 服务器,禁止用户向refs/heads命名空间下的引用执行推送(除非特别的授权),即不允许用户直接向分支进行提交。
为了让开发者能够向 Git 服务器提交修订,Gerrit 的Git 服务器只允许用户向特殊的引用refs/for/<branch-name>下执行推送,其中<branch-name>即为开发者的工作分支。
向refs/for/<branch-name>命名空间下推送并不会在其中创建引用,而是为新的提交分配一个 ID,称为 review-id ,并为该 review-id 的访问建立如下格式的引用refs/changes/nn/<review-id>/m,其中:review-id 是 Gerrit 为评审任务顺序而分配的全局唯一的号码。
nn 为 review-id 的后两位数,位数不足用零补齐。
即 nn 为 review-id 除以 100 的余数。
m 为修订号,该 review-id 的首次提交修订号为1,如果该修订被打回,重新提交修订号会自增。
1 /p/gerrit/wiki/Background3.Git 库的钩子脚本 hooks/commit-msg为了保证已经提交审核的修订通过审核入库后,如果被别的分支拣选(cherry-pick)后再推送至服务器时不会产生新的重复的评审任务,Gerrit 设计了一套特殊的方法,即要求每个提交在提交说明中包含 Change-Id 键值对作为标签,该标签在首次生成时使用特殊的哈希算法以保障其唯一性。
执行拣选操作时,提交说明会被保持,即来自原始提交说明中的 Change-Id键值对也会保持不变,这样当新提交推送到 Gerrit 服务器时,Gerrit 会发现新的提交包含了已经处理过的Change-Id ,就不再为该修订创建新的评审任务和 review-id,而直接将提交入库。
为了使得 Git 提交中包含唯一的 Change-Id,Gerrit 提供了一个钩子脚本,将该脚本拷贝到开发者的本地 Git 库的钩子脚本目录中,即脚本文件.git/hooks/commit-msg。
这个钩子脚本在用户提交时,自动在提交说明中创建 Change-Id 键值对。
至于如何实现 Change-Id 值的唯一性,可以参考该脚本。
当 Gerrit 获取到用户向refs/for/<branch-name>推送的提交中包含“Change-Id: I...”的格式时,如果该 Change-Id 之前没有见过,会创建一个新的评审任务并分配新的 review-id,并在 Gerrit 的数据库中保存 Change-Id 和 review-id 的关联。
如果用户的提交因为某种原因被打回重做,开发者修改之后重新推送到 Gerrit 时就要注意在提交说明中使用相同的 Change-Id (使用 --amend 提交即可保持提交说明),以免创建新的评审任务。
还要在推送时将当前分支推送到refs/changes/<nn>/<review-id>/<m>中,是为该评审任务的一个新的修订,其中<nn>和<review-id>和之前提交的评审任务的修订号相同,<m>则要人工选择一个新的修订号。
以上说起来很复杂,但是在实际操作中只要使用 repo 这一工具,就相对容易多了。
4.其余一切交给 WebGerrit 另外一个重要的组件就是 Web 服务器,通过 Web 服务器实现对整个评审工作流的控制。
关于 Gerrit 工作流,请参见本章开头出现的 Gerrit 工作流程图。
想要感受一下 Gerrit 的魅力?请直接访问 Android 项目的 Gerrit 网站:https:///,您会看到如图32-2的界面。
图32-2:Android 项目代码审核网站点击菜单中的“Merged”即可显示已经通过评审且合并到代码库中的审核任务。
图32-3中显示的就是 Andorid 一个已经合并到代码库中的历史评审任务。
图32-3:Android 项目的 16993 号评审从图32-3中可以看出:URL 中显示的评审任务编号为 16993。
该评审任务的 Change-Id 以字母 I 开头,包含了一个唯一的 40 位 SHA1 哈希值。
整个评审任务有三个人参与,一个人进行了检查(verify),两个人进行了代码审核。
该评审任务的状态为已合并:“merged”。
该评审任务总共包含两个补丁集: Patch set 1 和Patch set 2。
补丁集的下载方法是:repo download platform/sdk 16993/2。
如果使用 repo 命令获取补丁集是非常方便的,因为封装后的 repo 屏蔽掉了 Gerrit 的一些实现细节,例如补丁集在 Git 库中的存在位置。
如前所述,补丁集实际保存在refs/changes命名空间下。
使用git ls-remote命令,从 Gerrit 维护的代码库中可以看到补丁集对应的引用名称。
$ git ls-remote \ssh://:29418/platform/sdk \refs/changes/93/16993*5fb1e79b01166f5192f11c5f509cf51f06ab023d refs/changes/93/16993/1d342ef5b41f07c0202bc26e2bfff745b7c86d5a7 refs/changes/93/16993/2 接下来就来介绍一下 Gerrit 服务器的部署和使用方法。
32.2架设 Gerrit 的服务器1.下载 war 包Gerrit 是由 Java 开发的,被封装为一个 war 包:gerrit.war ,安装非常简洁。
如果需要从源码编译出 war 包,可以参照相关文档1。
不过最简单的就是从 Google Code 上直接下载编译好的war 包。
从下面的地址下载 Gerrit 的 war 包:/p/gerrit/downloads/list。
在下载页面会有一个文件名类似Gerrit-x.x.x.war 的 war 包,这个文件就是 Gerrit 的全部。
示例中使用的是 2.1.5.1 版本,把下载的 Gerrit-2.1.5.1.war 包重命名为 Gerrit.war 。
下面的介绍就是基于这个版本。
2.数据库选择Gerrit 需要数据库来维护账户信息、跟踪评审任务等。
目前支持的数据库类型有 PostgreSQL、1/svn/documentation/2.1.5/dev-readme.htmlMySQL 及嵌入式的 H2 数据库。
选择使用默认的 H2 内置数据库是最简单的,因为这样无须任何设置。
如果想使用更为熟悉的 PostgreSQL 或 MySQL,则需要预先建立数据库。
对于 PostgreSQL,在数据库中创建一个用户 gerrit,并创建一个数据库 reviewdb。
createuser -A -D -P -E gerritcreatedb -E UTF-8 -O gerrit reviewdb对于 MySQL,在数据库中创建一个用户 gerrit 并为其设置口令(不要真如下面那样将口令设置为“secret”),并创建一个数据库 reviewdb。
$ mysql -u root -pmysql> CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'secret';mysql> CREATE DATABASE reviewdb;mysql> ALTER DATABASE reviewdb charset=latin1;mysql> GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';mysql> FLUSH PRIVILEGES;3.以一个专用用户帐号执行安装在系统中创建一个专用的用户帐号如:gerrit。