开源的一大乐趣就是任何人都可以参与其中。试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的BUG。

作为全球最大的开源社区GitHub,是通过pull request这种形式向上游仓库递交补丁的。具体的操作流程去看github官方文档就好了。这里谈谈如何递交一个漂亮的pull request。

混迹github已经有 好几年的光阴,大大小小的pull request被合并的也有好几十个了,总结下个人的经验,哪些pull request能更加获得青睐,相信把握这几个要点,你的代码被上游合并的几率将大大提高。

详细阅读contribution guide

大多数大型的开源项目都会有一个Contribution Guide的文档说明,里面记录贡献代码的格式和规范。如果你要发起pull request的项目中包含这个文档,那么请务必按照文档上的格式规范化你的pull request,否则很可能被项目维护人员拒绝的。

对于没有这种文档的开源项目,基本上把握以下几个原则,也是非常容易被合并的。

git commit记录保持一致性

在递交代码之前看看git log的输出,看看历史递交记录中的commit记录是怎么写的,最好语法上保持一致性。有些项目是非常看中commit记录的一致性和规范性的,比如Angular项目,就是通过commit记录拉取release notes的,不符合commit规范的pull request很可能被直接打回。

对于格式要求没有那么严格的项目,基本上可以从历史commit里面拷贝一个跟你的递交内容差不多的commit记录,稍微做下改动就可以了。

代码风格一致性

这个可以说是开发者最为看重的一个因素。和原风格不符的PR几乎百分百被直接打回。每个人可能都有自己喜好的代码风格,但是切记,pull request一定要按照上游仓库的风格来。

比如我这个pull request,因为风格不一致就被作者抱怨过(作者使用的是<tab>符缩进,而我的PR使用空格缩进)。

代码质量不能太差

这个和上面那条很多地方是相通的,就是都要阅读一下别的几个代码文件,确定一下代码风格,以及有没有你需要用到的函数/方法,这样你就不用再写很多冗余代码了。同时,代码风格上的一致性也可以最大限度的避免烂代码的存在。

Pull Request信息规范化编写

很多开源项目可能已经定义好了issue和pull request的模板,照着填写就好了。对于没有模板的项目,可以看看已经合并的PR的信息是怎么写的,参照就可以了。

如果没有合适的参照,至少按照条目列清楚你做了哪些修改,以及修改的目的(实现什么功能?或者修改了什么样的BUG,并给出对应的重现方式,如果已有issue反馈这种问题,当然直接引用issue链接就好了)

限制pull request的规模

不要在单一的pull request做大规模的改动,这样会带来审核代码的困难性,也许你的PR会因此反馈周期被无限制的拉长。印象中微软曾经给node js递交过一个超大的pull request,几乎每个代码文件都有改动。结果引来上千项目维护者的围观,共同审阅了大半年。

如果你希望你的pull request被尽快合并,那么不应该改动太多才发起PR。应该每个小改动就发起一次PR,尽快得到上游开发者的审阅。

确保测试必须通过

某些开源项目有自动化测试的步骤,通常是通过Jenkins或者Travis CI等工具自动触发自动化构建的。测试失败的代码几乎不会通过审核,所以这个也是务必要注意的。绝大多数开源项目都会有命令行工具跑自动化测试,如mvn test / gradle test / make test等等。如果你不确定代码是如何运行自动化测试命令的。那么可以点击进入ci robot提供的地址,看看自动化测试工具打印在终端上的命令,本地跑一下那个命令运行测试即可。务必确保本地测试能通过之后再递交pull request

基本上按照以上几个原则递交pull request,那么你的代码被合并的几率将大大提高,共同享受开源带来的乐趣吧。:)

如何在github上递交高质量的pull request的更多相关文章

  1. github上如何合并别人的pull request

    https://github.com/Epix37/Hearthstone-Deck-Tracker/issues/1391 I fetch the code from your repository ...

  2. 关于如何在github上创建团队开发环境

    今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...

  3. 如何在 Github 上发现优秀的开源项目?

    之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Git ...

  4. 如何在github上提交pr

    如何在github上提交pr 1.fork开源的代码到自己的远程仓库 2.clone自己的仓库到本地电脑 3.与源代码的github仓库建立新的连接 git remote add upstream h ...

  5. 如何在github上部署自己的前端项目

    很多时候我们想需要一个地址就可以访问自己的前端作品, 但是注册一个服务器和域名是需要花钱,很多小伙伴都不愿意, 其实这种前端静态页面github就可以帮我们预览其效果,而且只要在有网的情况下都可以访问 ...

  6. Pull Request的正确打开方式(如何在GitHub上贡献开源项目)

    Pull Request的正确打开方式(如何在GitHub上贡献开源项目) GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/f ...

  7. 如何在GitHub上大显身手?

    推荐一篇良许大佬的文章,如何在github上大显身手.拥有自己的github,且有所贡献,这是一件很有意义的的事情,在面试上也是加分项哦,赶紧搞起来. 转载至http://uee.me/aHAfN 这 ...

  8. 如何在 GitHUb 上使用 gitbook 发布一本在线书籍

    如何在 GitHUb 上使用 gitbook 发布一本在线书籍 ebook / pdf refs https://docs.gitbook.com/integrations/github xgqfrm ...

  9. 如何在 GitHub 上高效阅读源码?

    原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...

随机推荐

  1. 计算机网络学习笔记NO.2 物理层

    2.1 基本概念 2.1.1 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(定义标准) 机械特性:定 ...

  2. Azure多因素认证

    什么是多重身份验证? 双重验证是需要多种验证方法的身份验证方法,可为用户登录和事务额外提供一层重要的安全保障. 它的工作原理是需要以下两种或多种验证方法: 用户知道的某样东西(通常为密码) 用户具有的 ...

  3. Python循环语句,对象

    Python循环语句,对象 案例1:斐波那契数列 案例2:模拟cp操作 案例3:生成8位随机密码 1 案例1:斐波那契数列 1.1 问题 编写fib.py脚本,主要要求如下: 输出具有10个数字的斐波 ...

  4. 【Linux】Linux(一)Linux常用命令

    一 命令行提示符 1.[root@localhost ~]# 当前登录用户@主机名:当前所在目录$ # 超级用户 $  普通用户 当前所在目录:~ 用户家目录 管理员 /root 普通用户 /home ...

  5. 2017蓝桥杯算式900(C++C组)

    题目:算式900 小明的作业本上有道思考题:  看下面的算式:  (□□□□-□□□□)*□□=900  其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字.  注意:0不能作为某 ...

  6. 在MAC上如何使用SQL Server

    由于小编在这学期要学习数据库原理这门课程,需要用到SQL Server,然而大家都知道SQL Server目前是只能在Windows上使用,我们在mac电脑上如何使用呢?我们可以借助目前比较火的Doc ...

  7. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)

    曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...

  8. 修改vs默认浏览器

    右键你的Html或者网页项目,选择"使用以下工具浏览" 跳出选择框,选择你想要的浏览器作为默认值即可,也可以添加你想要的浏览器.

  9. pyinstaller打包

    参考 官网:http://www.pyinstaller.org/ pyinstaller参数使用 使用spec文件 安装 Windows依赖pypiwin32,新版的pyinstaller已经包含了 ...

  10. JavaScript_Array

    Array 概念特点 值的有序集合: 每一个值叫一个元素: 每个元素在数组中有一个位置,以数字表示,称为索引(下标): 元素可以是任何类型 索引从0开始,最大为2的32次方 数组的创建 数组直接量 v ...