超级账本的各个子项目都提供了十分丰富的开发和提交代码的指南和文档,一般可以在代码的docs目录下找到。大部分项目贡献代码的流程都是相似的,这里以Fabric项目为例进行讲解。

1.安装环境

推荐在Linux(如Ubuntu 16.04+)或MacOS环境中开发Hyperledger项目代码。

不同项目会依赖不同的环境,可以从项目文档中找到。以Fabric项目为例,开发需要安装如下依赖:

·Git:用来从Gerrit仓库获取代码并进行版本管理;

·Golang 1.6+:访问golang.org进行安装,之后需要配置$GOPATH环境变量。注意不同项目可能需要不同语言环境;

·Docker 1.12+:用来支持容器环境,注意MacOS下推荐使用Docker for Mac。

2.获取代码

首先注册Linux Foundation ID(LF ID),如果没有可以到http://identity.linuxfoundation.org/ 进行免费注册。

使用LF ID登录http://gerrit.hyperledger.org/ ,在配置页面(http://gerrit.hyperledger.org/r/#/settings/ssh-keys ),添加个人SSH Pub key,否则每次访问仓库需要手动输入用户名和密码。

查看项目列表,找到对应项目,采用Clone with commit-msg hook的方式来获取源码。

按照Go语言推荐代码结构,执行如下命令拉取代码,放到$GOPATH/src/github.com/hyperledger/路径下,其中LF_ID替换为用户个人的Linux Foundation ID:



$ mkdir $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
$ git clone ssh://[email protected]:29418/fabric && scp -p -P 29418
   [email protected]:hooks/commit-msg fabric/.git/hooks/


如果没有添加个人SSH pubkey,则可以通过HTTP方式clone进行,此时需要手动输入用户名和密码信息:



$ git clone http://[email protected]/r/fabric && (cd fabric &&
   curl -kLo `git rev-parse --git-dir`/hooks/commit-msg http://[email protected]
   hyperledger.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --
   git-dir`/hooks/commit-msg)


如果是首次使用Git,可能还会提示配置默认的用户名和Email地址等信息。通过如下命令进行简单配置即可:



$ git config user.name "your name"
$ git config user.email "your email"


3.编译和测试

大部分编译和安装过程都可以利用Makefile来执行,具体以项目代码为准。以Fabric项目为例,常见操作如表8-1所示。

表8-1 Fabric项目的常见操作

8.5 贡献代码

4.提交代码

仍然使用LF ID登录jira.hyperledger.org,查看有没有未分配(unassigned)的任务,如果对某个任务感兴趣,可以添加自己为 assignee。自己也可以创建新的任务。初始创建的任务处于TODO状态;开始工作后可以标记为In Progress状态;提交对应补丁后需要更新为In Review状态;任务完成后更新为Done状态。

如果希望完成某任务(如FAB-XXX),则对于前面Clone下来的代码,本地创建新的分支FAB-XXX:



$ git checkout -b FAB-XXX


实现任务代码,完成后,执行语法格式检查和测试等,确保所有检查和测试都通过。

提交代码到本地仓库:



$ git commit -a -s


会自动打开一个编辑器窗口,需要填写commit信息,格式一般要求为:



[FAB-XXX] Simple words to describe main change

This fixes #FAB-XXX.

A more detailed description can be here, with several
paragraphs and sentences...


首次提交的话,需要配置下git review:



$ git review -s


之后可以使用git review命令推送到远端仓库,推送成功后会得到补丁的编号和访问地址:



$ git review


例如:



$ git review
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote:   http://gerrit.hyperledger.org/r/YYY [FAB-XXX] Fix some problem
remote:
To ssh://gerrit.hyperledger.org:29418/fabric.git
   * [new branch]      HEAD -> refs/publish/master/FAB-XXX


5.评审代码

提交成功后,可以打开gerrit.hyperledger.org/r/,查看自己最新提交的patchset信息,邀请项目的审阅者(reviewer)们进行评审。可将链接添加到Jira对应任务上,并在RocketChat对应的频道中贴出。

如果评审得到通过,则会被项目的维护者们合并到主分支。否则还需要针对审阅者提出的建议进一步的修正。修正过程跟提交代码过程类似,唯一不同是提交的时候使用如下命令:



$ git commit -a --amend


表示这个提交是对旧提交的一次修订。

一般情况下,为了方便评审,尽量保证每个patchset完成的改动不要太多(最好不要超过200行),并且实现功能明确,集中在对应Jira任务定义的范围内。

6.完整流程

完整的流程总结如图8-4所示,开发者用Git进行代码的版本管理,用Gerrit进行代码的评审合作。

如果需要修复某个提交补丁的问题,则通过git commit-a--amend进行修复,并作为补丁的新版本再次提交审阅。每次通过git review提交时,应当通过git log查看确保本地只有一条提交记录。

7.提问的智慧

常听有人问:为什么在邮件列表提出的问题会无人响应?

由于开源社区是松散组织形式,大部分开发者都是利用业余时间进行开发和参与社区工作。因此,在社区提出问题时就必须要注意问题的质量和提问的方式。如果碰到无人回答的情况,一定要先从自身找原因。

如果能做到下面几点,会让你所提出的问题得到更多的关注:

·正确的渠道:这点十分重要,但很容易被忽视,不同项目和领域有不同的渠道,一定要在相关的渠道进行提问,例如每个项目对应的邮件列表;

·问题的新颖性:在提问之前,应该利用包括搜索引擎、技术文档、邮件列表等方式查询过问题的关键词,确保提出的问题是新颖的,有价值的,而不是已经被回答过多遍的常识性问题;

·适当的上下文:不少提问者的问题中只包括一条很简单的错误信息,这样的问题会让社区的开发者有心帮忙也无力回答,良好的上下文应该带有完整的环境信息、所使用的软件版本、进行操作的详细步骤、问题相关的日志、自己对问题的思考等,这些都可以帮助他人快速重现问题;

·注意礼仪:虽然技术社区里大家沟通方式会更为直接一些,但懂得礼仪毫无疑问是会受到欢迎的。要牢记,他人的帮助并非是义务的,要对他人的任何帮助要心存感恩。

8.5 贡献代码

图8-4 代码提交流程

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=933

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相关文章: