如何优雅地参与开源贡献,向顶级开源项目提交 PR(Pull Request),如何更好地提交 PR?

针对这些问题和疑惑,我们邀请了 OpenAtom OpenHarmony(以下简称“OpenHarmony”)社区运营专家祝尚元,为大家分享《如何成为 OpenHarmony 社区贡献达人》。他将着重为大家讲解:社区角色定义、贡献类型、贡献前须知、贡献方式、如何处理冲突等 5 个方面,帮助大家更加高效地提 PR,助力大家成为顶级社区的大神。

参与战“码”先锋,PR 征集令! 你可以在 Gitee 的 OpenHarmony 代码仓提交 PR 参与活动,和全球开发者同台竞技,比拼技艺,为 OpenHarmony 贡献力量。

祝尚元
OpenHarmony社区运营专家

一、成为社区达人,先从了解角色定义和贡献类型开始

独行快,众行远,社区的发展需要社区参与者的持续贡献。每个参与者可以根据自己在社区中的角色来做相应类型的贡献。祝尚元解释到,社区角色可分为:User、Contributor、Committer、SIG leader、PMC,每个角色的解释和贡献类型如图所示。

社区角色定义及贡献类型

二、如何参与社区贡献

OpenHarmony 社区的发展需要大家共同参与,开发者参与社区贡献的最主要方式是提 Issue 和 PR。当开发者发现问题时,可以通过提 Issue 的方式表达出来。开发者可以通过提 PR 解决相关问题。在提 PR 之前,开发者需要签署开发者原创声明,熟悉相关文档和代码编写规范,并配置环境,准备Git 命令行工具、Gitee 账户,设置账户信息等。

一切准备就绪后,即可 Fork 目标代码仓到自己的 Gitee 账户,将代码 Clone 到本地开始编辑修改。当修改完善后,即可提交 PR,并关联 Issue。提交的 PR 将会被 Committer 检视并提出检视建议。贡献者根据建议再次修改完善后,如果得到 Committer 的认可,PR 将被成功合入到代码仓,自此 PR 顺利提交完成。流程可见下图。

参与社区贡献的流程

三、贡献代码之前需要了解

社区需要参与者踊跃贡献,更需要大家有序贡献,这就需要大家在贡献之前了解相关的指引文档。

作为一个开源社区公民,共建友好的社区开发和协作环境,是我们应尽的责任。在加入开源社区前,我们需要遵守《贡献者公约》V1.4。还需要了解设计规范和代码风格文档,通过遵守设计原则,治理章程,可以引导 OpenHarmony 生态向健康、有序的方向发展和演进;另外,遵循编程规范,在进行代码开发、检视、测试中,保持代码风格的统一,将有助于后续的维护和更新迭代。

如果想引入第三方开源软件,需要了解第三方开源软件引入指导文档,保障引入到 OpenHarmony 项目中的第三方开源软件的质量。如果想对文档进行贡献,可以先了解文档写作规范。撰写规范的文档是为了方便后续的社区参与者更好地阅读和了解项目。

提PR之前需要了解的事项

四、参与贡献的5个方式

对于刚接触开源社区的开发者,普遍存在的疑问是能在社区贡献什么?因为大家对项目熟悉程度的不同,可以根据自身能力寻找可以贡献的点。针对这个问题,祝尚元给出了 5 点建议。

接触开源项目,第一,从阅读文档开始。对于在初期的开源项目,由于运营时间较短,参与人数可能不多,缺乏详细的项目文档资料,参与者可以通过编写文档为开源项目做出贡献。现有的文档也有利于开发者去学习、掌握一个开源项目的入口。在我们使用文档时,如果发现问题,也可以反馈问题,帮助修复问题。

第二,找到自己的兴趣点,关注(Watch)感兴趣的项目。当遇到项目中提到的问题Issue,可以研究问题的缘由,并尝试解决问题,也可以学习其他人是如何解决问题,去评论和发表自己的看法。

第三,参与开源项目测试,贡献测试用例,编写贡献 Demo。当我们上手练习的时候,可以加深对项目的理解,在上手的过程中发现问题,并向社区反馈,进行贡献。

第四,如果在工作中能使用到开源项目,就有更大的便利性来进行社区贡献。我们可以在使用开源项目时,反馈需求,希望开源项目支持更丰富的功能,也可以反馈缺陷。当我们有相应的能力,可以去帮助实现这些需求,修复这些提交的缺陷。

第五,当你具备一定的开发水平,并对开源项目十分了解,可以直接认领在项目中被提出的需求,或者发现自己有更好的想法能够帮助项目带来更好的提升,这样可以直接提交PR进行贡献。

为开源项目做贡献的五个点

五、如何处理代码冲突

提交代码后,经常会遇到一个常见的场景:处理代码冲突。对于解决冲突,祝尚元强调:首先需要了解冲突的由来。当有贡献者与你同时改动了同一个文件的同一行代码,并提前于你提交 PR 被合入,那你再提交 PR 就会发生冲突。

遇到冲突时,一些贡献者容易想到把冲突的 PR 关掉,更新到最新的代码后,再提交一个新的 PR,其实大可不必这样。为了避免冲突,编码前一定要更新到最新的代码。当冲突发生时,修复冲突,推荐使用 Rebase 变基操作,而不是 Merge 合并操作。Merge 合并会产生冗余的 Commit 提交记录。

修复提交冲突

为 OpenHarmony 社区做贡献,成为开源达人,从提交第一个 PR 开始,把我们对 OpenHarmony 的热爱和期望编写到代码中。OpenHarmony 社区需要每一位开发者的支持与贡献,你的每一个 Issue、每一个 PR 贡献,都将被广大的开发者们看到并从中收益,一起来行动,提 PR,一起成为开源达人!

参加战“码”先锋,PR征集令
提交PR赢取豪礼

近日,战“码”先锋,PR 征集令!「OpenHarmony 开源贡献者计划 2022」惊喜上线。活动由 OpenHarmony 工作委员会发起,为了鼓励开发者积极参与开源软件开发维护。召集各位战“码”先锋参与 OpenHarmony 开源共建活动,一起来战!你可在 Gitee OpenHarmony 代码仓提交 PR 参与活动,和大家同台竞技,比拼技艺。

在这里你可以:建立影响力:个人专访,活动邀请,加持社区光环;学习新技能:开源大咖在线直播,详尽文档指引,教你不敲命令也能提 PR;认识新朋友:与志同道合的开发者交流技术;提升职场竞争力:提升编码能力,斩获心仪 Offer,升职加薪 UP UP UP;获得限量周边:定制 T 恤、徽章、手表、音响等礼品拿不停;即刻扫码入群,成为战“码”先锋,跟大咖交流,赢取丰厚大礼。

文章中的相关链接汇总

战“码”先锋,PR征集令活动链接:

https://gitee.com/openharmony-sig/online_event/tree/master/Contributor%20program

OpenHarmony ArkUI子系统:

https://gitee.com/openharmony/ark_runtime_core

https://gitee.com/openharmony/ark_js_runtime

https://gitee.com/openharmony/ark_ts2abc

DCO签署地址:

https://dco.openharmony.cn/sign

贡献者公约B1.4:

https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%A1%8C%E4%B8%BA%E5%87%86%E5%88%99.md:

贡献指南:

https://gitee.com/openharmony/docs/tree/master/zh-cn/contribute

Git Commit Message 编写指南:

https://gitee.com/help/articles/4231#article-header0

如何处理代码冲突:

https://gitee.com/help/articles/4194

搜索

复制

做了5年开源项目,我总结了以下提PR经验!的更多相关文章

  1. 开源项目AndroidUtil-采用Fragment实现TabHost

    原文出自:方杰|http://fangjie.info/?p=141 转载请注明出处 学习Android也有一段时间了,感觉大部分的Android应用都有很多类似的组件,所以就打算做了这样一个开源项目 ...

  2. 开源项目AndroidUtil-採用Fragment实现TabHost

    原文出自:方杰|http://fangjie.sinaapp.com/?p=141 转载请注明出处 学习Android也有一段时间了.感觉大部分的Android应用都有非常多类似的组件,所以就打算做了 ...

  3. 我参与 Seata 开源项目的一些感悟

    丁老师在他的知识星球邀请我回答以下一个问题: 我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟. 感谢丁老师的邀请问答: 在这里我就简单说下,我这段时间参与 Se ...

  4. Atitit.为什么小公司也要做高大上开源项目

    Atitit.为什么小公司也要做高大上开源项目 1. 为什么手头有很多加急的事情还要做高大上开源项目??1 2. 从长远看,发展 高大上开源项目计划对于解决我们在应急项目正面临着的种种严峻问题也大有裨 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

  8. 【目录】本博客其他.NET开源项目文章目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.本博客其他.NET开源项目文章目录 37..NET平台开源项目速览(17)FluentConsole让你的控制台酷起来 36..NET平 ...

  9. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧

    注意:有网友提出部分项目停止更新的事情,这个问题我特意注意过,很多都是小功能组件,功能稳定,没有bug,没更新是正常的.够用就行了.其次技术支持的事情,对开源免费来说,不能太强求,这里发布的都是小功能 ...

  10. android studio 使用jar包,arr包和怎么使用githup开源项目中的aar包或module

    我这里的android studio的版本是2.2.3版本 一.现在大家都用android studio了,就有人问怎么使用jar包 其实使用jar包比较简单 直接吧jar放入工程的app目录下的li ...

随机推荐

  1. 第140篇:微信小程序的登录流程

    好家伙,补补补   顶不住了,跑不掉了,这部分的知识还是要补上   来看看微信小程序登录的完整流程   最左边的一列就是前端负责的部分了 几个关键的参数: code:一个用户登录凭证,就是一个临时的t ...

  2. 第一百零一篇:DOM节点类型

    好家伙,   DOM DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model).它的作用是将网页转为一个javascript对象, 从而可以使用ja ...

  3. 【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?

    问题描述 如何按条件删除 Storage Table 中的数据,如果Table中有大量的条记录需要删除,Java代码如何按条件删除 Table中的数据(Entity)? (通过Azure Storag ...

  4. 【Azure 应用服务】Azure Durable Function(持久函数)在执行Activity Function时候,因为调用函数名称错误而导致长时间无响应问题

    问题描述 在使用Azure Durable Function函数,调用函数链模式来调用多个Activity Function. 函数链:https://docs.azure.cn/zh-cn/azur ...

  5. C++ 深拷贝浅拷贝

    C++ 深拷贝浅拷贝 C++默认生成的拷贝构造函数,他的行为就是浅拷贝,他只会复制一个一模一样的的指针,并不会操作指针指向的东西. 要想实现我们的逻辑需求,就要自定义拷贝构造函数,实现深拷贝. 我们来 ...

  6. 【规范】Apifox就应该这么玩

    前言 缘由 好的工具就要配好的玩法 起因是最近在回顾项目时,看到了年事已高并且长时间不用的Postman,发现之前自己整理的接口文档十分混乱且没有规律.遂打开现在使用的Apifox,将本狗目前项目中使 ...

  7. Java 常用类 String类与其他结构之间的转换-----String 与 基本数据类型,包装类之间的转换

    1 /* 2 涉及到String类与其他结构之间的转换 3 4 */ 5 6 //String 与 基本数据类型,包装类之间的转换 7 //String --->基本数据类型,包装类:调用包装类 ...

  8. Java 类的成员之四: 代码块(或初始化块)

    1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 类的成员之四: 代码块(或初始化块) 6 * @author Bytezero·z ...

  9. Codeforces Round 345 (Div. 1)A. Watchmen(容斥原理)

    A. Watchmen 当欧几里得距离和曼哈顿距离相等时,\(x1==x2||y1==y2\) 这两个条件满足其一.这和容斥原理一样,至少选择一个的条件. 我们可以计算xi,以及小于i之前的这些,这样 ...

  10. 【技术积累】Java 8 新特性

    一.Lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使J ...