如何在github上递交高质量的pull request
开源的一大乐趣就是任何人都可以参与其中。试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的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的更多相关文章
- github上如何合并别人的pull request
https://github.com/Epix37/Hearthstone-Deck-Tracker/issues/1391 I fetch the code from your repository ...
- 关于如何在github上创建团队开发环境
今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...
- 如何在 Github 上发现优秀的开源项目?
之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Git ...
- 如何在github上提交pr
如何在github上提交pr 1.fork开源的代码到自己的远程仓库 2.clone自己的仓库到本地电脑 3.与源代码的github仓库建立新的连接 git remote add upstream h ...
- 如何在github上部署自己的前端项目
很多时候我们想需要一个地址就可以访问自己的前端作品, 但是注册一个服务器和域名是需要花钱,很多小伙伴都不愿意, 其实这种前端静态页面github就可以帮我们预览其效果,而且只要在有网的情况下都可以访问 ...
- Pull Request的正确打开方式(如何在GitHub上贡献开源项目)
Pull Request的正确打开方式(如何在GitHub上贡献开源项目) GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/f ...
- 如何在GitHub上大显身手?
推荐一篇良许大佬的文章,如何在github上大显身手.拥有自己的github,且有所贡献,这是一件很有意义的的事情,在面试上也是加分项哦,赶紧搞起来. 转载至http://uee.me/aHAfN 这 ...
- 如何在 GitHUb 上使用 gitbook 发布一本在线书籍
如何在 GitHUb 上使用 gitbook 发布一本在线书籍 ebook / pdf refs https://docs.gitbook.com/integrations/github xgqfrm ...
- 如何在 GitHub 上高效阅读源码?
原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...
随机推荐
- iSCSI集群与存储
...
- kepp running 团队视频分析初步总结
一.遇码则码队视频讨论: 时 间:2020.03.31 方 式:视频会议 参加人员:温学智,胡海靖,莫佳亮 二.视频讨论会议截图: 三.纪要内容: (1).主要功能和界面显示: 温学智:在 ...
- MTK Android 源码目录分析
Android 源码目录分析 Android 4.0 |-- abi (application binary interface:应用二进制接口)|-- art (average retrieval ...
- SQL基础系列(1)-基本语法--转载w3school
1. 建原始表 USE [Northwind] GO /****** Object: Table [dbo].[Persons] Script Date: 2016/6/8 7:31:5 ...
- Dubbo学习系列之十八(Skywalking服务跟踪)
我们知道,微服务不是独立的存在,否则就不需要微服务这个架构了,那么当发起一次请求,如何知道这次请求的轨迹,或者说遇到响应缓慢. 请求出错的情况,我们该如何定位呢?这就涉及到APM(Applicatio ...
- Java成长记录第二集--基础重点
第一篇写的博客给自己的学习路线立了个flag后,感觉现在学习的积极性大增,这也离不开那几位老铁们的互相鼓励.废话不多说,现在给出自己总结的Java基础部分所要重点注意的内容,对以后的开发工作也是很常用 ...
- spark——详解rdd常用的转化和行动操作
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark第三篇文章,我们继续来看RDD的一些操作. 我们前文说道在spark当中RDD的操作可以分为两种,一种是转化操作(trans ...
- 植物大战僵尸的代码如何使用python来实现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:程序IT圈 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- [linux] 权限问题
权限问题一直蒙蒙的,下面就是总结一下!(原文链接:http://www.cnblogs.com/chengJAVA/p/4319420.html) 指令名称:chmod 使用权限 : 所有使用者 使用 ...
- [html]浏览器标签小图标LOGO简单设置
方式一:如果是一个项目一个LOGO 的话,直接接把图片像素设置成16x16像素,然后改名favicon.ico放在项目根部目录就可以,自动识别的! 方式二:简单设置! 首先找一个图片把像素设置成16x ...