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语言程序设计第一次作业 冯亚杰

    (一)实验总结 求圆面积和周长 (1)题目 输入圆的半径,计算圆的周长和面积. (2)流程图 (3)测试数据及运行结果 测试数据1:r=7 运行结果: 测试数据2:r=5 运行结果: (4)实验分析 ...

  2. Java 反射 Method threw 'java.lang.InstantiationException' exception.

    查看这个InstantiationException:异常的api所说的是: 当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该 ...

  3. Angular 路由配置

    路由,简单的来说就是让组件之间进行跳转和参数的传递. 1.先在app目录下创建一个名为app.route.ts的路由组件 2.打开app.route.ts 在里面创建路由组件的代码(可通过编辑器快捷生 ...

  4. Appium--入门demo

    Appium环境搭建已经在在博客中写出 http://www.cnblogs.com/feimaoyuzhubaobao/p/5057832.html   那么本篇博客主要介绍java版本的appiu ...

  5. Node.js 字符串解码器

    稳定性: 3 - 稳定 通过 require('string_decoder') ,可以使用这个模块.字符串解码器(StringDecoder)将缓存(buffer)解码为字符串.这是 buffer. ...

  6. Android源码解析——Toast

    简介 Toast是一种向用户快速展示少量信息的视图.当它显示时,它会浮在整个应用层的上面,并且不会获取到焦点.它的设计思想是能够向用户展示些信息,但又能尽量不显得唐突.本篇我们来研读一下Toast的源 ...

  7. Android studio 中引用jar的其实是Maven?(一)

    由于Studio比eclipse多了一步对工程构建的步骤,即为build.gradle这个文件运行,因此其引入第三方开发jar包与lib工程对比Eclipse已完成不同,引入第三方jar与lib工程显 ...

  8. Programming In Scala笔记-第十七章、Scala中的集合类型

    本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...

  9. PHP+MySQL 分页那点事

    分页技术随处可见,这可以算得上是最为基础的网站功能了.于是今天尝试着用PHP来实现一个分页的小例子. 准备工作 环境准备 Apache MySQL PHP 工作环境 数据库准备 建库 建表 预存数据 ...

  10. Spring之MVC模块

    Spring MVC的Controller用于处理用户的请求.Controller相当于Struts 1里的Action,他们的实现机制.运行原理都类似 Controller是个接口,一般直接继承Ab ...