如何成为apache开源社区的贡献者

2 篇文章 0 订阅

参与开源

作为一个程序员,给世界上顶级的apache社区贡献一下自己的代码,成为一个apache contributer,把这个写到简历里,是不是觉得很爽,下面我结合apache flink来简单讲讲如何给apache 贡献你的第一行代码。

当我们想给apache贡献代码的时候,想必你是遇到了一个apache项目的bug、或者是想添加一个新功能。这时候我们可以这样做,比如对于一些很小的bug、非常明显的bug、或者一些非常小的功能的改进,我们可以直接在https://issues.apache.org/上创建一个ISSUE。比如说我创建的这个issue,https://issues.apache.org/jira/browse/FLINK-16646 ,这个ISSUE主要的问题是flink在读取处理多个orc文件的时候会抛出来一个空指针异常。

对于一些稍微大点的改动,最好是先发一个讨论到flink的邮件列表,听取一下大家的意见.如果是一些更大的改进,需要开启一个FLIP (Flink Improvement Proposals),
在这个地址,https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals ,大家经过讨论之后,最后发起投票,在有3个committer通过之后,就可以自进入开发阶段了。然后可以创建相关的issue或者其子issue。

我觉得没有必要刻意去issue列表去找issue,其实只是你在工作或者学习的过程中,一定会遇到各式各样的问题,也许是遇到了一个bug,也许是发现开源软件无法满足我们的需求,这个时候你可以先去issue列表找找有没有相关的问题,如果有的话,看看现在什么进度了,可以一起参与进来,如果没有,可以自己提交一个。

开发代码

下面我们讲讲怎么具体开发一个issue。

fork代码

首先我们要有一个自己的github账号,我们需要把flink的代码fork到自己的账号下,打开https://github.com/apache/flink,点击这个fork按钮,之后我们就会在我们自己的账号下看到相应的工程了。

image

下载到本地

之后我们就可以把刚才fork的flink的代码下载到我们的本地,可以用下面的命令:

cd my_workspace  
git clone  https://github.com/zhangjun0x01/flink.git

添加远程仓库

接下来我们添加一个apache的远程仓库,主要是为了后期更新代码。

git remote add apache https://github.com/apache/flink.git

之后执行查询远程仓库命令git remote -v,可以看到有两个远程仓库。

origin	https://github.com/zhangjun0x01/flink.git (fetch)
origin	https://github.com/zhangjun0x01/flink.git (push)
apache	https://github.com/apache/flink.git (fetch)
apache	https://github.com/apache/flink.git (push)

添加新分支

接下来,添加一个新分支,用于开发我们的代码。分支的名字可以自己随便起,比如为了方便区分和查询,我们可以起一个和这issue同名的分支名,或者根据功能起一个自己好识别的分支名.

我这个是我起了一个和这个功能相关的分支名.

https://github.com/zhangjun0x01/flink/tree/flink-orc-input

然后我们现在就可以在这个分支上开发自己的代码了,开发完代码之后,我们需要检查一下代码的规范,这个也就是checkstyle,具体的使用可以参考这篇文章: 【flink教程-在IntelliJ IDEA 中玩转 checkstyle

写测试代码

最后开发完了相关的代码之后,需要在相关的测试类里面添加相应的测试代码,如果添加一个新功能,还需要添加相应的文档。

提交代码

我们开发完了代码之后,这段时间可能flink的主分支已经有了代码的更新,所以我们为了避免冲突,还需要把最新的代码更新下来。首先切换到主分支

git checkout master 
git pull apache master

之后,我们切换到我们的分支:

# 切换到自己的分支
git checkout flink-orc-input
# 添加刚才改动的代码,如果不确定改了哪些,可以git status看一下
git add your_code 
git commit -m '注释'
# 把变化的代码添加到我们的分支
git rebase
# 提交分支到自己的仓库
git push origin flink-orc-input

提交到社区

我们提交分支之后,就可以提交相应的PR(Pull Request)了,比如我的这个PR: https://github.com/apache/flink/pull/11434 。
提交的时候注意标题要写成 [ISSUE] + title的形式,比如 [FLINK-16646] [orc] Flink read orc file … 这样的话就能把你这个pr和issue自动关联上。

之后我们就能在相应的issue页面看到关联的PR

image

合并PR

你的代码提交完之后,之后会有相关的committer或者其他人帮你review代码,当然你也能帮别人review代码,这个也是你贡献社区的一种方式。

如果committer认同了你的改动,然后他就会把你的改动合并到master分支,或者是其他相应的分支。

比如我这个,不仅仅是改了master,还改了1.10分支,所以这里有两个关联的PR。

等下一次版本发布的时候,然后你的名字就出现了apache的官网上,你就成了apache的contributer。 https://flink.apache.org/news/2020/07/06/release-1.11.0.html#list-of-contributors

从开源中学习成长

上面我们提到,我们在提交了一个PR之后,需要写一个测试用例,那么其他人在开发新功能的时候也是写了大量的测试用例,当flink新发布了一个版本,你想要了解最新功能的使用方法,那么如何去获取一手的最新资料呢,去源码中学习相关的测试类无疑是最好的方法,因为这些测试用例都是这个功能的开发者提供的,是最权威的。

因为新开发的功能一般都是开发者自己做了自测,没有经过生产环境大规模的各种测试用例的测试,所以新出来的版本在使用的过程中很容易出现一些意想不到的问题,所以当我们使用新版本的时候,出了问题的时候,这个时候网上一定搜不到答案,想解决问题,就只能看源码了,这个就是一个很好的成长过程。

当我们使用了免费的开源服务的时候,遇到问题,我们可以帮忙解决问题,然后把解决方案贡献给社区,形成一个良性循环,这样才能让社区发展的越来越好,我们所有人都从中受益。

更多精彩内容,欢迎关注我的公众号【大数据技术与应用实战】,一起成长。
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享、交友、游戏的社交网络 集成了聚合独立博客的能力,共建共享优质资源 并且 100% 开源 欢迎到 Sym 官方讨论区了解更多。另外,如果你需要搭建一个企业内网论坛,请使用 SymX。 动机 Sym 的诞生是有如下几点原因: (正版) 很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统功能过于简陋、细节不够精致、缺乏长期维护 另外,我们正在探索新的社区模式,实现独奏(Solo)与协奏(Symphony)相结合的社区新体验 (野版) 万能的 GitHub 上连个能用的 Java 社区系统都找不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 Titandb 学习主站 呆萌狮 - Demo's 公司维护: 四方环视 如果你也搭建好了,欢迎通过 Pull Request 将你的站点加到这个列表中 :-p 功能特性 具体功能点细节可浏览 Sym 功能点脑图,下面列出了 Sym 的主要特性,说明 现代化 的由来。 好用的编辑器 Markdown:支持 GFM 语法以及一些扩展语法 格式调整:粗体、斜体、超链接、引用、列表等可以通过工具栏按钮,同时也支持快捷键 文件上传:支持复制粘贴或者拖拽上传图片;支持上传普通文件;对 MP3 会使用在线播放器进行渲染 剪贴板处理:自动将复制的内容转换为 Markdown 格式;外链的图片自动上传站内 @用户:根据用户名自动补全,支持快捷键 Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求帖子必须 分类 到某一个节点下,信息架构方式属于自上而下。Sym 不是自上而下的节点式信息架构,帖子不需要固定分类,通过标签 聚合 到某个领域下。 标签:根据帖子内容智能抽取关键字进行标签自动补全,一篇帖子关联多个标签。标签和标签之间以带边权重的图结构进行描述,方便进行相关计算 领域:一个领域下包含了多个标签,通过标签将帖子自动聚合到具体领域,随时可以通过增减关联标签从而达到调整领域范围,最终聚合出适合的帖子列表 满足多样化的发帖需求 目前支持 4 中帖子类型,满足不同用户的偏好: 普通帖子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有帖子都可以设置 打赏区 ,打赏区可以放置一些“珍藏”内容,只有打赏后的用户才能浏览。打赏区编辑器同样支持 Markdown、Emoji 和文件上传等特性。打赏区支持内容更新,并可以随时调整打赏积分值。 对于测试帖,可以使用 Sandbox 机制:带有 Sandbox 标签的帖子将视为测试帖,不会显示在首页或是某领域内,只会展现在发帖者自己的帖子列表中。 人性化的回帖交互 实时呈现:回帖提交后其他浏览者可以不刷新页面就实时看到你的回帖 随时滚动:浮出式回帖编辑器方便回帖者随时滚动屏幕查看其他内容,不必担心焦点丢失 真正的回复:回复是针对回帖而言的,而 @ 是针对用户而言的,@ 是提及不是回复,很多系统都没有考虑到这一点。回复/引用可以在当前位置进行展开浏览,也可以跳转到回帖处,并支持跨分页跳转 智能机器人:回帖时可以让机器人也参与到讨论中来,活跃气氛的同时说不定机器人真的能解决一些问题呢 用户个性化设置 用户可以自己设置很多参数以满足个性化需求: 帖子列表浏览分页每页条目数 回帖浏览模式:传统(按发布时间升序,无实时推送刷新);实时(按发布时间降序,实时推送新回帖) 头像浏览模式:原图(支持 gif 动图);静态图 Chrome 通知/邮件订阅/键盘快捷键开关 设置常用 Emoji,方便发布内容时快速插入表情 除了功能个性化配置项,还有很多隐私项开关: 是否公开帖子/回帖列表 是否公开

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值