Skip to content
目录

如何参与开源项目

每个人对于开源都有自己的理解,对于毕业前的我而言,参与开源的原因除了兴趣之外,当然也希望能丰富自己的简历。正是因为面向兴趣编程到面向收入编程的转变,刚开始工作的我有一些困惑,慢慢地才领悟到一个道理,技术对于商业运作而言只是一种工具。

又不是不能用

所以我“开摆”了,将工作内外的编程解构为两个部分:「make money」 与 「make sense」。在工作一年后的今天,我对开源有了新的理解:在当前的社会环境下,它能够帮助你修正对于编程与自我价值的认知,感受你的输出对于世界发展的推动。

如何找到可贡献的点

一般来说,在使用的过程中发现了问题才会参与贡献,但我们也可以主动寻找“问题”。

这是 axios 仓库的主页:

nav

这里我们只需要关注前四个栏目:

  • Code:浏览源码文件
  • Issues:报告问题、提出可以改进的部分
  • Pull requests:请求合并源码
  • Discussions:探讨使用方法与未来发展方向

IssuesDiscussions 的功能可能有些重合,官方对它们的解释是:

GitHub Discussions 是提问、分享想法、与他人沟通、制订 RFC、规划资源、发公告的最佳工具。

GitHub Issues 用于追踪明确存在起点和终点的可执行工作,包括添加新功能、修复漏洞、日常更新等。

Issues 和 Discussions 都可以帮助您提高工作效率和协作性。当它们一起使用时,您可以通过保留 Issue 和 Pull request 来追踪正在进行的事项,同时使用 Discussions 来进行对话、提问和社区讨论,从而提高效率。 还有另一个好处:您可以参考 Issue 对应的 Discussion,这可以为一个正在进行的事项提供背景和上下文。如果您在完成事项之前需要更多信息来进行决断,可以先将 Issue 转换为 Discussion。

以我的经验总结,Issues 这里被翻译为“事项”更合适,它用来跟踪需要“解决”的事情,例如漏洞修复与功能新增,而 Discussions 更多的是开发者提问使用方法以及讨论最佳实践。

不同的栏目有不同的参与方式:

Issues

这个栏目每天都会有新的问题产生,一些新手开发者可能会在这里提问,如果我们能作出解答并且提醒他在 Discussions 栏目提问更合适,就能帮助库维护者把精力放在更应该专注的问题上。

除了提问之外,剩下的内容通常可以分为 bugenhancement。对于缺少细节的 bug,我们可以提醒他提供复现路径;对于已经提出过的问题,我们可以标记该问题重复并附上对应的链接。一些有经验的开发者除了提出问题之外,还会提供问题线索以及解决思路,我们可以通过这些信息来确认问题是否存在,并在明确问题与解决方向之后修改源码并请求合并。

Pull requests

这个栏目的内容都是请求合并源码,我们可以做一些基本的代码审查。

这是一个 pull request

pull request

从左到右依次是:

  • Conversation:讨论的地方
  • Commits:查看 Git 提交历史
  • Checks:查看仓库对于该 pull request 的检查
  • Files changed:查看文件的改动
  • +346 -7:绿色代表代码新增的行数,红色代表代码移除的行数

打开 Files changed 栏目,我们就能对文件的改动进行审查。如果我们认为其中某个部分存在疑问,可以点击行号右侧的蓝色按钮进行留言:

comment

如果我们认为这个地方有重构的意义,也可以添加一条修改建议:

suggestion

编辑完成后可以选择添加单条评论(Add single comment),或者继续审查其他代码(Start a review)。

Discussions

在这个栏目可以参与大家对于项目的讨论,或者解答其他开发者提出的问题。提问者可以将你的回答标记为正确答案,这样就能帮助到更多人,同时你的 GitHub 个人资料将会解锁 Galaxy Brain 成就!

如何贡献源码

在我们明确了问题与解决方向之后,最直观的参与方式当然是贡献源码。在一次完整的源码贡献中,我们在各个环节都应该遵守项目的规定,例如 axios 的贡献规范:https://github.com/axios/axios/blob/v1.0.0-alpha.1/CONTRIBUTING.md

阅读了这些内容之后,我们就可以正式发起一个 pull request

  1. 分叉项目仓库并克隆到本地

我们在项目主页的右侧点击 Fork 按钮创建一个该仓库的分叉,完成后克隆这个分叉到本地。

fork

  1. 创建分支

其实我们可以在主分支上直接修改源码并请求合并,但是创建分支可以让我们利用不同的分支并行解决不同的问题。

  1. 修改源码并推送到分叉仓库上

一般修改源码都需要添加对应的测试用例,但无论我们添不添加新的用例,都必须保证原先的用例能够 100% 通过,以证明本次修改不会影响到其他逻辑。

  1. 发起 pull request

我们进入项目仓库,就能看到 GitHub 提示我们可以发起 pull request,点击按钮发起即可。

add pull request

除非解决的问题和方式特别显而易见,否则我们应该在描述中讲明我们本次修改的用意,更好的做法是确保这个 pull request 有一个对应的 issue 用于说明问题。我们可以在描述中关联对应的 issue,这样库维护者就能快速了解上下文,并且在代码合并后由系统自动关闭该 issue

  • 修复漏洞
fixes (issue_link)
1
  • 添加功能
closes (issue_link)
1

接下来我们要做的就是等待代码审查与代码合并,这次的贡献就算是完成啦。

写在最后

对于新手而言,可以先尝试从解答问题开始,慢慢加深对这个开源项目的理解。代码贡献也可以先从修正单词拼写错误或者完善文档开始,一步步成为项目的合作者甚至是团队成员。

感谢你看到这里,这是我从小到大写的第一篇正儿八经的文章,希望能对你有所帮助。

参考文章

本文的作者是小菜,来自 xxx 团队。