11

贡献开源项目的流程

 4 years ago
source link: http://yuanfentiank789.github.io/2016/08/14/fork_flow/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

title: 贡献开源项目的流程

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

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

flow.png

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

下面来实际操作。

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

fork.png

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

my_fork.png

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

cloning.png

做版本和同步

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

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

my_commit.png

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

发 PR 和代码审核

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

new_pr.png

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

new_pr_view.png

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

final_pr.png

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

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

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

delete_repo.png

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

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

network.png

基于 fork 的快速 PR

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

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

fork_quick_pr.png

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

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



Recommend

  • 185
    • 掘金 juejin.im 7 years ago
    • Cache

    零起点的开源社区贡献指南

    【开源社区贡献者】听起来是个专属于顶级开发者的头衔,但它真的有这么遥不可及吗?下面的分享旨在揭开它的神秘面纱,帮助感兴趣的同学更轻松地参与到社区项目中来。 首先需要澄清的是,本文作者自己并不是社区高大上项目的原创作者,只是在一个 5k+ Star,100+ 贡...

  • 83

    区区一年的时间足够发生太多事情。去年的这个时候,我肯定不会想到现在的我会在厦门去往杭州参加 D2 的高铁上写下这篇总结。回顾 2017,有太多的事情值得记下,这里谨挑出和前端相关的地方和大家分享吧。 小事记 今年年中,我辞掉了毕业后的第一份工作,来到了厦门...

  • 68

    几年前,“开源”还是点点星火,如今已成燎原之势。在过去的 2018 年,企业都在积极加强自己在开源方面的实力,IBM 大手笔 340 亿美元收购了 RedHat,微软 75 亿美元收购了 GitHub。 开源软件蓬勃发展的同时,安全漏洞风险也在增加...

  • 30
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    为开源项目做贡献的10个步骤

    创建干净,管理良好的GitHub贡献的简短指南。 在本文中,我将给出10个简单的步骤,以确保GitHub的贡献快速而干净。

  • 11

    给顶级开源项目 Spring Boot 贡献代码是一种什么样的体验?发布于 4 月 7 日先点赞再看,养成好习惯Spring Boot的默认日志框架一直是 Logback...

  • 6

    在以前,fork 是一个贬义词,指的是某个人使开源项目向不同的方向发展,或者创建一个竞争项目,使得原项目的贡献者分裂。在 GitHub,fork 指的是在你自己空间中创建的项目副本,这个副本允许你以一种更开放的方式对其进行...

  • 3
    • www.ixiqin.com 3 years ago
    • Cache

    如何为任何开源项目做贡献?

    如何为任何开源项目做贡献?在《如何成为Golang贡献者》中,我介绍了, 我对于 Golang 的第一个贡献是修复了一处 Typo ,这是整个开源贡献中可以说是最简单的一部分...

  • 6

    GitHub 是什么?GitHub 是通过 Git 进行版本控制的软件源代码托管服务。 截止到 2015年,GitHub 已经有超过 2800 万注册用户和 7900 万代码库。事实上已经成为了世界上最大的代码存放网站和开源社区。

  • 4

    F5暂停俄罗斯贡献NGINX 开源项目 – 开源派 NGINX所属的F5 公司宣布,取消俄罗斯对 F5 的网络访问,并暂停所有来自俄罗斯境内对 NGINX 开源项目的贡献。F5 的CEO François Locoh-Donou在官网宣称,为了支持乌克兰人民,F5公司已经暂...

  • 4

    如何为 Github 开源项目贡献代码 2022-04-15 宋洋葱 宋洋葱 什么是 pr(pull request) 参考...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK