如何从零开始参与大型开源项目

写在前面的话

上世纪 70 年代,IBM 发明了关系型数据库。但是随着现在移动互联网的发展,接入设备越来越多,数据量越来越大,业务越来越复杂,传统的数据库显然已经不能满足海量数据存储的需求。虽然目前市场上也不乏分布式数据库模型,但没有品位的文艺青年不是好工程师,我们觉得,不,这些方案都不是我们想要的,它们不够美,鲜少能够把分布式事务与弹性扩展做到完美。

受 Google Spanner/F1 的启发,一款从一开始就选择了开源道路的 TiDB 诞生了。 它是一款代表未来的新型分布式 NewSQL 数据库,它可以随着数据增长而无缝水平扩展,只需要通过增加更多的机器来满足业务增长需求,应用层可以不用关心存储的容量和吞吐,用东旭的话说就是「他自己会生长」。

在开源的世界里,TiDB 和 TiKV 吸引了更多的具有极客气质的开发者,目前已经拥有超过 9000 个 star 和 100 个 contributor,这已然是一个世界顶级开源项目的水准。而成就了这一切的,则是来自社区的力量。

最近我们收到了很多封这样的邮件和留言,大家说:

  • 谢谢你们,使得旁人也能接触大型开源项目。本身自己是DBA,对数据库方面较干兴趣,也希望自己能逐步深入数据库领域,深入TiDB,为 TiDB 社区贡献更多、更有价值的力量。
  • 我是一个在校学生,刚刚收到邮件说我成为了 TiDB 的 Contributor,这让我觉得当初没听父母的话坚持了自己喜欢的计算机技术,是个正确的选择,但我还需要更多的历练,直到能完整地展现、表达我的思维。

这让我感触颇多,因为,应该是我们感谢你们才是啊,没有社区,一个开源项目就成不了一股清泉甚至一汪海洋。 公司的小姑娘说,她觉得还有很多的人想要参与进来的,可工程师团队欠缺平易近人的表达,这个得改。

于是便有了这篇文章以及未来的多篇文章和活动,我们欢迎所有的具有气质的开发者能和 TiDB 一起成长,一起见证数据库领域的革新,改变世界这事儿有时候也不那么难。

我要重点感谢今天这篇文章的作者,来自社区的朱武(GitHub ID:viile )、小卢(GitHub ID:lwhhhh )和杨文(GitHub ID: yangwenmai),当在 TiDB Contributor Club 里提到想要做这件事的时候,是他们踊跃地加入了 TiDB Tech Writer 的队伍,高效又专业地完成了下文的编辑,谢谢你们。

一个典型的开源项目是由什么组成的

The Community(社区)

  • 一个项目经常会有一个围绕着它的社区,这个社区由各个承担不同角色的用户组成。
  • 项目的拥有者:在他们账号中创建项目并拥有它的用户或者组织。
  • 维护者和合作者:主要做项目相关的工作和推动项目发展,通常情况下拥有者和维护者是同一个人,他们拥有仓库的写入权限。
  • 贡献者:发起拉取请求 (pull request) 并且被合并到项目里面的人。
  • 社区成员:对项目非常关心,并且在关于项目的特性以及 pull requests 的讨论中非常活跃的人。

The Docs(文档)

项目中经常出现的文件有:

  • Readme:几乎所有的 Github 项目都包含一个 README.md 文件,readme 文件提供了一些项目的详细信息,包括如何使用,如何构建。有时候也会告诉你如何成为贡献者。
  • Contributing:项目以及项目的维护者各式各样,所以参与贡献的最佳方式也不尽相同。如果你想成为贡献者的话,那么你要先阅读那些有 CONTRIBUTING 标签的文档。Contributing 文档会详细介绍了项目的维护者希望得到哪些补丁或者是新增的特性。 文件里也可以包含需要写哪些测试,代码风格,或者是哪些地方需要增加补丁之类的内容。
  • License:LICENSE 文件就是这个开源项目的许可证。一个开源项目会告知用户他们可以做什么,不可做什么(比如:使用,修改,重新分发),以及贡献者允许其他人做哪些事。开源许可证有多种,你可以在认识各种开源协议及其关系了解更多关于开源许可证的信息。
  • Documentation:许多大型项目不会只通过自述文件去引导用户如何使用。在这些项目中你经常可以找到通往其他文件的超链接,或者是在仓库中找到一个叫做 docs 的文件夹.

齐步走成为 Contributor

Create an Issue

如果你在使用项目中发现了一个 bug,而且你不知道怎么解决这个 bug。或者使用文档时遇到了麻烦。或者有关于这个项目的问题。你可以创建一个 issue。 不管你有什么 bug,你提出 bug 后,会对那些和你有同样 bug 的人提供帮助。 更多关于 issue 如何工作的信息,请点击 Issues guide

Issues Pro Tips

  • 检查你的问题是否已经存在 重复的问题会浪费大家的时间,所以请先搜索打开和已经关闭的问题,来确认你的问题是否已经提交过了。
  • 清楚描述你的问题

TiDB Issue 模版如下

TiKV Issue 模版如下

  • 给出你的代码链接 使用像 JSFiddle 或者 CodePen 等工具,贴出你的代码,好帮助别人复现你的问题
  • 详细的系统环境介绍 例如使用什么版本的浏览器,什么版本的库,什么版本的操作系统等其他你运行环境的介绍。 go 版本: go version Linux 版本: uname -a
  • 详细的错误输出或者日志 使用 Gist 贴出你的错误日志。如果你在 issue 中附带错误日志,请使用``` 来标记你的日志。以便更好的显示。

Pull Request

如果你能解决这个 bug,或者你能够添加其他的功能。并且知道如何成为贡献者,理解 license,已经签过Contributor Licence Agreement (CLA) 后,请发起 Pull Request。这样维护人员可以将你的分支与现有分支进行比较,来决定是否合并你的更改。

Pull Request Pro Tips

  • Fork 代码并且 clone 到你本地 通过将项目的地址添加为一个 remote,并且经常从 remote 合并更改来保持你的代码最新,以便在提交你的 pull 请求时,尽可能少的发生冲突。详情请参阅这里
  • 创建 branch 来修改你的代码,目前 TiDB 相关的项目默认的 branch 命名规则是 user/name。例如 disksing/grpc,简单明确,一目了然。
  • 描述清楚你的问题 方便其他人能够复现。或者说明你添加的功能有什么作用,并且清楚描述你做了哪些更改。
  • 注意测试 如果项目中包含逻辑修改,那么必须包含相应的测试,在 CI 中会包含测试覆盖率的检测,如果测试覆盖率下降,那么是不可以合并到 master 的。
  • 包含截图 如果您的更改包含 HTML/CSS 中的差异,请添加前后的屏幕截图。将图像拖放到您的 pull request 的正文中。
  • 保持良好的代码风格这意味着使用与你自己的代码风格中不同的缩进,分号或注释,但是使维护者更容易合并,其他人将来更容易理解和维护。目前 TiDB 项目的 CI 检测包含代码风格的检查,如果代码风格不符合要求,那么是不可以合并到 master 的。

Open Pull Requests

一旦你新增一个 pull request,讨论将围绕你的更改开始。其他贡献者和用户可能会进入讨论,但最终决定是由维护者决定的。你可能会被要求对你的 pull request 进行一些更改,如果是这样,请向你的 branch 添加更多代码并推送它们,它们将自动进入现有的 pull request。

如果你的 pull request 被合并,这会非常棒。如果没有被合并,不要灰心。也许你的更改不是项目维护者需要的。或者更改已经存在了。发生这种情况时,我们建议你根据收到的任何反馈来修改代码,并再次提出 pull request。或创建自己的开源项目。

TiDB 合并流程

PR 提交之后,请耐心等待维护者进行 Review。 目前一般在一到两个工作日内都会进行 Review,如果当前的 PR 堆积数量较多可能回复会比较慢。 代码提交后 CI 会执行我们内部的测试,你需要保证所有的单元测试是可以通过的。期间可能有其它的提交会与当前 PR 冲突,这时需要修复冲突。 维护者在 Review 过程中可能会提出一些修改意见。修改完成之后如果 reviewer 认为没问题了,你会收到 LGTM(looks good to me) 的回复。当收到两个及以上的 LGTM 后,该 PR 将会被合并。

标注:本文「一个典型的开源项目是由什么组成的」及「齐步走为 Contributor」参考自英文 GitHub Guide,由社区成员朱武(GitHub ID: viile)、小卢(GitHub ID:lwhhhh)着手翻译并替换部分原文中的截图。GitHub Guides:如何参与一个 GitHub 开源项目英文原文地址: https://guides.github.com/activities/contributing-to-open-source/

**加入 TiDB Contributor Club 为更好地促进 Contributor 间的交流,便于随时提出好的想法和反馈,我们创建了一个 Contributor Club 微信群,对成为 TiDB Contributor 有兴趣的同学可以添加 TiDB Robot 微信号:tidbai,它会在后台和你打招呼,并积极招募你成为开源社区的一员。

TiDB 源码地址:https://github.com/pingcap/tidb 技术咨询:info@pingcap.com

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

2018年值得关注度的语言、框架和工具

前端框架:Angular 2,Vue.js,Bootstrap,LESS / SASS。 Web Web平台最近取得了两个重大进展——Web Assembly...

33712
来自专栏开源项目

【码云周刊第 10 期】放码过来,四个男人的带头冲锋!!

一周热门资讯回顾 码云全面改版:新界面新态度,更一致的体验 DuangDuangDuang!码云项目的 Readme.md 特殊技能 微软技术透明中心...

3517
来自专栏FreeBuf

远控木马中的VIP:盗刷网购账户购买虚拟礼品卡

为了省钱,很多人会尝试各种各样的方法免费获取网盘和视频网站的VIP权限。正因为有这种需求,各种所谓的“网盘不限速神器”或是“VIP助手”也就应运而生了。但这个工...

2069
来自专栏韩伟的专栏

如何提高程序员的生产率(上)

一、硬件资源 1) 办公环境 ? 大部分开发团队都不把座椅家具视为一个非常重要的问题。拥有宽敞的桌面的环境,可以在桌上放置更多的东西:本子、笔、杯子、书本、打...

2996
来自专栏HappenLee的技术杂谈

大数据小视角3:CarbonData,来自华为的中国力量

对于OLAP查询来说,存在多种不同类型的查询,存储结构的不同会影响到不同查询的数据表现。所以CarbonData的定位是作为一种通用的查询存储数据,通过Spar...

803
来自专栏令仔很忙

新手学Linux(二)----使用 Vagrant 打造跨平台开发环境(一)

做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的相性并不是那么好,各...

642
来自专栏FreeBuf

走进科学:如何正确的隐藏自己的行踪

大家好!我发现很多新人在讨论 “匿名”,所以我想我该写一篇清晰讲解它的教程,无论你是否能够隐藏自己。 我们也会讨论“隐藏自己”的方法及工具,但先集中注意力去理...

1766
来自专栏FreeBuf

CODESYS WebVisu产品出现严重漏洞,影响100多款ICS系统

根据外媒 Securitweek 报道,Istury IOT 的朱文哲(音)发现 3S-Smart Software Solutions 的 CODESYS W...

2135
来自专栏Script Boy (CN-SIMO)

淡说Linux 的发展史

 ♦ 1  Linux的简单介绍        Linux与Windows一样都是一套OS(操作系统),Windows界面美观 ,普通用户很容易上手,点点鼠标就...

8590
来自专栏小狼的世界

Fedora 12 正式发布

Fedora 12 昨天正式发布了,而且最新的 Fedora 13 已经在平行的开发中了,感觉都快跟不上 Fedora 的脚步了。

1033

扫码关注云+社区