ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何向OpenDaylight社区贡献代码

2021-05-27 15:05:52  阅读:172  来源: 互联网

标签:社区 git 代码 Gerrit 提交 commit OpenDaylight


本文由两部分构成,第一部分简要介绍了Gerrit的工作原理以工作流程,第二部分结合自己成功提交代码的例子,向大家展示向OpenDaylight提交源码的过程。向开源项目提交代码也没有大家想象的那么难,所以希望日后能够看见大家在OpenDaylight提交代码。


Gerrit概述

Gerrit是一个基于Git的,用于review code commit的框架,无论是OpenDaylight、ONOS或者是OpenStack都使用Gerrit作为他们的代码管理工具。它的最大特点就是,每一个commit都需要被review之后才能够被接受。Commit:被记录的对于代码的改动(存在本地)。


下图是Gerrit的架构,可以看出开发者并不是直接向Authoritative Repository提交自己的代码,而是向Pending Changes提交自己的代码。只有Reviewer同意之后,开发者提交的代码才会被提交到Authoritative Repository。


Authoritative Repository:中央仓库,整个项目的被review过的代码。

图片

一个通用的Gerrit所管理的代码发生改变的流程如下:


1.Cloning the Repository 下载源码,你将在这个基础上,添加代码或者修改现有的代码


2.Creating the Review 将你的本地的代码推到远端的Gerrit,等待进行review


3.Reviewing the Change Reviewer(审查者)将会利用Gerrit对你的代码进行review。有两个概念需要理解一个是Verified,另一个是Code-Review。Verifying代表着对代码进行实际编译、单元测试等,主要是自动化程序。Code-Review是一个人来查看你的代码,确保这段代码的逻辑正确,编码风格良好等。


4.Reworking the Change 如果你或者代码的审查者发现你提交的代码存在一些问题,你需要重新修改你的这个提交。这是通过git commit --amend实现的,详见下文示例。


5.Trying out the Change 在本阶段中,审查者可以直接下载你的patch,并做一些额外的测试,保证代码的正确性。


6.Manually Verifying the Change 拥有Verify权限的人将会对你的代码进行投票,通过的话verified+1,不通过的话-1 Fails。


7.Submitting the Change 到了这个阶段,你离代码被merge只有一步之遥了。如果拥有相应权限的审查者认为你的代码符合要求,他就可以Submit Patch Set X。然后你的代码就已被merge到源码中了。Patch Set X可以理解为你第X次amend了你的一个commit。

向OpenDaylight社区贡献代码主要流程

0. 下载必要的工具
图片

安装git、gitk、git-review工具。Git是一个版本控制系统、gitk是一个对commit图的可视化工具、git-review是Gerrit的命令行工具,它能使得Git clone或者提交change或者fetch变得简单。


1. 注册OpenDaylight的Gerrit账号

https://wiki.opendaylight.org/view/Submit_a_Patch#Getting_started_with_Git_and_Gerrit

此链接的第二部分Getting started with Git and Gerrit有对于注册的详细步骤。

2. 克隆你所要进行开发的项目

https://git.opendaylight.org/gerrit/#/admin/projects/ 

此链接给出了所有的OpenDaylight项目。当你点击某一个项目名的时候,以ALTO项目,会进入如下页面:

图片

红色框内的命令,即为需要在terminal中输入的命令。可以点击红色框内右侧的小图标,进行复制。建议大家在登陆后选择以ssh的方式下载源码。


3. 设置基本信息

克隆好源码之后,就要进行基本信息的设置。

图片

请注意有一步会让你输入用户名,输入你之前注册的OpenDaylight账户用户名即可。


事实上在这些操作中,最主要的是在你的./.git/config文件中加入了这个关于远程repo(仓库)的信息


图片

4.提交Patch

4.1 将远端代码拉取到本地
图片

这样做的目的是让你基于最新的code base进行开发,尽可能减少需要merge或者rebase的情况。


注:proxychains只是我自己用的本地代理,在执行这条命令时不需要输入proxychains,下文中出现proxychains时也可省略。


4.2 在新的分支上进行开发

图片

比如我将在一个叫做submit-patch-guide的分支上进行我的开发。新建一个文件夹,叫做submit-patch-guide。


4.3 将你修改的文件加入staging area(暂存区)

图片
你可以一次性添加多个文件到暂存区。


4.4 commit你在4.3中的修改到本地仓库中

图片

-s参数是用来对commit进行签名的。关于commit的信息如何填写可以参考这个链接(推荐的commit信息格式):http://chris.beams.io/posts/git-commit/


4.5 将你的代码发布到Gerrit,等待审查者审查

图片

在你提交成功后,你可以在git.opendaylight.org/gerrit上面找到你的提交,本例的提交截图如下:

图片请注意红框中的内容,OpenDaylight项目中,你每一个提交都会经过jenkins-releng的自动验证。 只有通过自动验证的代码才可能被merge。


5.更新Patch

事实这一步骤在开源社区中是最关键的,在你的代码提交后,拥有相应权限的管理员会对你的代码进行审查,他会进行review,会给你提出建议与你交流。这是一个提高你代码风格、易读性的机会。


例如他给我的建议就是希望让我的代码拥有更好的docstring。简单来说就是让我用一定的格式把每个函数的功能写出来。Python有一个可以利用docstring自动生成文档的工具。

图片如果你按照4中的流程重新走一遍,那么你会提交一个新的patch。这是没有必要的,下面就是本小节的内容,如何更新你的patch。要更新其实也很简单,使用如下这个命令就好了:

图片

在执行过git commit --amend之后,你在本地的同一个commit就会被更新。你可以再输入git log确认一下没有新的commit被增加,而是原来的commit被修改。下面需要做的就是将本地commit,发送到远端,输入git review就可以了

图片
这时候在观察你提交的change页面可以看到,你已经往同一个commit(同一个commit通过commit ID来区分,也就是下图中上面一个红色框内的内容)更新了一个patch set。

图片

至此,一个向OpenDaylight共享代码的基本流程和基本工具已经介绍好了。最后就是贡献代码并没有大家想的那么难,希望大家的代码早日被merged!

图片

参考资料

OpenDaylight提交patch的官方指南:https://wiki.opendaylight.org/view/Submit_a_Patch#Getting_started_with_Git_and_Gerrit


关于git的基本概念的定义:https://help.github.com/articles/github-glossary/#


Gerrit用户手册:https://gerrit-documentation.storage.useso.com/Documentation/2.12.2/intro-quick.html


Git超简单入门指南:http://rogerdudler.github.io/git-guide/


标签:社区,git,代码,Gerrit,提交,commit,OpenDaylight
来源: https://blog.51cto.com/u_15127681/2822732

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有