Github 是目前世界上最大的开源项目的托管交流平台。贡献开源项目的流程也是
Github 全力支持的,也一样是遵循 Github Flow,虽然跟前面团队合作流程会有一点差别。在团队内部,大家都是有写权限的。但是网上的开源项目参与者众多。如果你一上去就跟项目的拥有者说,Hey,你给我加个写权限吧,别逗了,人家也不认识你,怎么可能呢?

Fork

所以第一步是 Fork 这个项目。所谓我 fork 别人的一个项目,就是指做一个把这个项目做一个拷贝,放到我自己的账户下。

基于 fork 的整个的流程就是上图展示的思路。第一步,先 fork,这样我就有了 happypeter/TLCL 这个项目了,那既然是我自己的项目,我就可以把它 clone 到我本地,做修改,然后推送到 github 上的我自己的那个 fork 之中。这样我把我自己的 fork 跟上游的仓库,也就是 billie66 名下的仓库来进行对比,就可以发出 Pull Request 了。

下面来实际操作。

来到 TLCL 的项目主页,也就是 https://github.com/billie66/TLCL 。点右上角的
fork 按钮。

这样,我自己的名下就多了一个 TLCL 项目,这个项目就叫做原项目的一个 fork 。

到这里 fork 这一步就结束了。那对于 happypeter/TLCL 这个仓库,我当然有修改的权限了,可以在网页上修改直接发 PR。不过一般我会 clone 到本地客户端中,在本地作修改,点右下角的 Clone In Desktop 按钮,来把项目 clone 到本地。

做版本和同步

区别于团队合作的 Github Flow,这里主要是没有开新分支,而是创建了一个新的
fork。上游仓库 billie66/TLCL 中代码是在 gh-pages 分支上,那现在我在本地的 gh-pages 修改,新版本同步到在 happypeter/TLCL 的 gh-pages 上就可以了。

本地修改,做 commit,然后同步到远端的 happypeter/TLCL 中,这些步骤到现在应该是轻车熟路,小菜一碟了。于是到 github.com 可以看到下图的内容

如上图所示到 happypeter/TLCL 的仓库主页,可以看到最新的我做的版本的留言,点开就可以看到我这次修改的内容,现在可以来发 PR 了。

发 PR 和代码审核

发 PR 的过程跟前面介绍过的没有本质区别。

如上图,点一下项目页面右侧的 Pull Request 链接,到达的页面中会有一个大大的绿按钮 New
Pull Request
,点一下就看到下面的页面

注意上面1处,要选对是哪两个分支进行对比,左侧是上游分支,也就是“目的地”分支,右侧是我自己的分支,有修改的内容。有时候 github 能猜对拿哪两个分支做对比,有时候就要自己手动选择一下。分支要是选得不对那么2处对比出来的代码肯定也会有问题的,所以还是比较容易看出来的。下面就可以点3处的大按钮来发 PR 了。之后,在 billie66/TLCL 下面,注意不是 happypeter/TLCL 下面,就会看到这个 PR 。

当项目拥有者 billie66,或者是项目的协作者( collaborator ) 看到 Pull Request,就可以来跟我讨论。如果决定要把我的代码 merge 进自己的仓库,点一下 Merge Pull Request 按钮就可以了。

这样,我这次贡献代码的工作就结束了。TLCL 的版本历史中会永远留下 happypeter 的名字。同时我发的这个 PR 关掉之后,也可以在 billie66/TLCL 的 Pull Requests 一项下面被永久保存,所以我可以放心的删除我自己的那个 fork 了。

后续工作

删除一个 fork ,跟删除一个我自己的项目仓库是一样的。

如上图,点开 settings 然后进入 Danger Zone 找 Delete This Repository 就可以来删除 happypeter/TLCL。当然如果会频繁的贡献同一个项目,自己名下长期保留一个 fork 也是可以的,但是这时候就要保证这个 fork 和上游仓库的同步,也是挺麻烦的。所以对于初学者,删掉,过些日子如果又想贡献,再
fork 一次不迟。

对于项目维护者,如果想随时了解自己的项目都有哪些人正在自己的 fork 进行修改,可以看一下项目的Network,如下图:

基于 fork 的快速 PR

前面介绍过快速 PR了,不过那个流程是基于一个我自己有写权限的项目。那对于人家的开源项目,我根本就不能修改,能不用在网页上直接发开速
PR 呢?幸运的是,答案是肯定的。而且过程是超级的简单和直观。

做法就是,我来到 bille66/TLCL 的这个项目,不做 fork,而是直接打开一个我想要编辑的文件,修改,然后做 commit 的时候选择下图中的第二项。

这样,github 会自动帮我 fork 一个 happypeter/TLCL 出来,把我所做的改动 commit 到我自己的这个 fork 中。这之后,就直接进入发 PR 的界面,操作就和前面的过程一样了。

总结

贡献开源项目,过程中可以跟老手讨论,所以是个学习编程的好方法。

[GitHub]第六讲:开源项目贡献流程的更多相关文章

  1. 使用GitHub进行协同项目开发和开源项目贡献

    本教程致力于摆脱git命令行快速的学习使用GitHub. 此次是GitHub课程的第三次课程,也是最后一次课程.推荐进行按照次序查看本次教程.上篇文章:程序员,一起玩转GitHub版本控制,超简单入门 ...

  2. 【Android 应用开发】GitHub 优秀的 Android 开源项目

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  3. github上有android开源项目

    下面是一些比较好的开源项目,总共分为5大类,也许对某一些人有用,有些项目也许将来某一天对自己也有用,所以整理到此,希望对大家有帮助.首先声明非原创,这篇blog的目的是分享给那些可能需要的人. htt ...

  4. GitHub上优秀的开源项目(转载)

    转载出处:https://github.com/Trinea/android-open-project 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.A ...

  5. GitHub 优秀的 Android 开源项目(转)

    今天查找资源时看到的一篇文章,总结了很多实用资源,十分感谢原作者分享. 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介 ...

  6. GitHub 优秀的 Android 开源项目

    转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...

  7. 【转】GitHub 优秀的 Android 开源项目

    转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...

  8. [转]GitHub 优秀的 Android 开源项目

    GitHub 优秀的 Android 开源项目 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageV ...

  9. 盘点 Github 所用到的开源项目

    http://www.php100.com/html/it/mobile/2014/0401/6736.html 在致力于开源事业的同时,Github也使用一些非常优秀的开源项目的来打造自己的平台与服 ...

随机推荐

  1. C# 导入excel报错 :不是预期外部表

    错误原因:由于Excel 97-2003的连接格式与Excel 2010 的 不同造成. 解决方案1: 很多人换了2010后,问的最多的问题之一是2003里最经典的ADO中的“provider=Mic ...

  2. C++是跨平台的语言

    最开始学习Java时,老师就说Java是跨平台的,而c++不是,这里要纠正一下观点,c++也是跨平台的,只不过是实现跨平台的方式不同而已. 1.平台 一般我们把CPU处理器与操作系统的整体叫平台.不同 ...

  3. windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定

    调整windows server 2003 最大远程连接数的步骤如下: 第1步.开始-->控制面板-->添加或删除程序-->添加/删除windows组件-->选择"终 ...

  4. 美链BEC合约漏洞技术分析

    这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈.这篇文章就来分析下BEC智能合约的漏洞 漏洞攻击交易 我们先来还原下攻击交易,这个交易可以在这个链接查询到. 我截图给大家 ...

  5. java 获得当前时间前指定几个小时的时间?

    //@2016-12-13 获取当前时间,指定前面多少小时的时间 //返回格式YYYYMMDDHHMMSS public static String getBeforeHourTime(int iho ...

  6. 81. Search in Rotated Sorted Array II (中等)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  7. ES6(es2015)新增实用方法汇总

    Array 1.map() [1,2,3,4].map(function(item, index, array){ return  item * 2; }) 对数组中的每一项执行一次回调函数,三个参数 ...

  8. 06 Nexus仓储/基础设施 - DevOps之路

    06 Nexus仓储/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Nexus仓储官网简介: Th ...

  9. 深入理解SpringCloud之引导程序应用上下文

    tips:我希望通过这篇文章来给对于bootstrap还不理解的朋友带来帮助.当然这篇文章不仅仅是讲解知识,我更希望给广大朋友带来学习与理解官方文档的一种思路.阅读本文前,建议大家对SpringBoo ...

  10. jQuery 遍历 – 同胞(siblings)

    同胞拥有相同的父元素. 通过 jQuery,您能够在 DOM 树中遍历元素的同胞元素. 在 DOM 树中水平遍历 有许多有用的方法让我们在 DOM 树进行水平遍历: siblings() next() ...