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. SpringMVC 处理映射

    一.Spring MVC控制器名称处理映射 以下示例展示如何利用Spring MVC 框架使用控制器名称处理程序映射. ControllerClassNameHandlerMapping类是基于约定的 ...

  2. mac下怎么删除隐藏文件比如 .Trashes文件

    U盘和移动硬盘接入Mac时会产生.Trashes,.Spotlight-V100,.fseventsd等文件 每插入Mac一次,都会检查是否有这些文件,如果没有,就会创建这些文件 特别是有时候,在文件 ...

  3. Postgresql合并年月日、月份和日期左侧补零

    在写一个统计查询的 SQL 语句时,需要根据年.月.日分组,但要求返回的字段是日期格式:yyyy年MM月dd日.刚开始我的做法是返回年.月.日,然后再手动拼接年月日,而且还要判断月份和日期是否为个位数 ...

  4. Linux(centos7)下安装Docker

    近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...

  5. supervisor使用,配置和安装(包括监控守护进程httpd,keepalived)

    yum -y install supervisor(如果安装不成功,需要更新源,yum -y install epel) 或者: wget --no-check-certificate https:/ ...

  6. spark on yarn 运行问题记录

    问题一: 18/03/15 07:59:23 INFO yarn.Client: client token: N/A diagnostics: Application application_1521 ...

  7. JavaScript 函数定义

    JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function function ...

  8. JavaSE基础问答

    1.JAVA的基本数据类型有哪些? JAVA的基本数据类型分为4类8种,就是整形 byte.short.int.long.浮点型 float 跟double,字符型 char,跟布尔型 true和 f ...

  9. Leetcode难度表及解题汇总

    Leetcode难度表及解题汇总 参考网上一份题目难度表,以及本人的解题. Id Question Difficulty Frequency Data Structures Algorithms Bl ...

  10. 百度编辑器UEditor常用设置函数

    最近在研究UEditor的使用,下面是附上传送门: 这是API文档http://ueditor.baidu.com/doc/ 这是下载地址http://ueditor.baidu.com/websit ...