在阅读了开源圣经《大教堂与集市》后,如果你也像我一样,对开源充满了兴趣,但是又苦于无从下手,这篇文章将手把手教你如何参与开源。
本文将从 3 个方面由浅入深详细展示如何真正参与开源。如果想直接参与一个开源项目,建议直接从第二部分「first-contributions」开始阅读。
使用 Git
「工欲善其事,必先利其器」。在互联网上要与他人一起合作开发,首先我们需要学习如何使用 Git。下面以 GitHub 为例,简单说明 Git 的使用。
Mac 一般会自带 Git,也可以通过安装 XCode 或者 homebrew 安装。Windows 系统可以从 Git 官网(可以通过阅读原文获取)。选择默认选项安装即可。安装完成之后打开终端(Terminal),输入
git --version
检查 Git 是否已经安装成功,安装成功将如下图所示显示 Git 的版本信息:
安装完成之后,我们需要在终端中输入以下代码设置一个名字和 email 来标识上传代码的人的身份:
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
将 "Your Name" 和 "your-email@example.com" 替换成自己的名字和 email。为了识别我们电脑的身份,也就是说让 Git 能够识别代码确实是通过我们的电脑上传的,需要在电脑上生成一个 SSH Key 作为电脑的身份标识。在终端中输入以下代码:
ssh-keygen -t rsa -C "your-email@example.com"
这里的 "your-email@example.com" 可以使用上面的 email 地址。如果没有报错信息,我们可以在用户主目录(Mac 在 ~ 目录下,Windows 在 C 盘的用户名目录)找到 「id_rsa」和「id_rsa.pub」两个文件。用文本编辑器打开「id_rsa.pub」文件,按下图顺序点击将里面的内容复制到 key 文本框中,标题(Title)可以任取一个自己能分辨的:
接着我们需要在 Github 上创建一个远程仓库用来存放代码:
按照上图所示顺序点击,给自己的仓库命名,其他选择默认即可,最后选择「Create repository」。完成之后 GitHub 会提示你可以创建自己的代码或者将已经存在的代码「推送」到这个代码仓库中。为了和下面介绍参与开源项目一致,这里介绍将仓库拉取到本地的方法。
点击复制,接着在终端中输入以下代码:
git clone "your reposity ssh"
这样就能在当前目录创建一个本地代码库。
一般开发的流程是,从「dev」分支创建一个自己的分支「my-branch」用来开发,将开发好的代码合并到 「dev」分支并提交 PR(Pull Requests)给同事或者领导审阅(Review)。定期将「dev」分支的代码合并到「main」分支,「main」分支上的代码才是真正给用户使用的代码。下面是一些常用的 Git 命令
git checkout -b "my-branch"
git add file
git commit -m "commit comment"
git merge dev
git push origin dev
第一条命令表示创建一个自己的分支并转到这个分支;第二条命令表示将某个文件加入到 Git 仓库中,如果使用 "git add ." 表示将所有文件加入 Git 仓库中;第三条命令表示提交当前的修改,并加上了注释 "commit comment";第四条命令表示将当前分支合并到 「dev」;第五条命令表示将「dev」分支推送到远程仓库中。当然现在 IDE 和 VS Code 对于 Git 的支持非常完善,可以通过这些工具来轻松完成 Git 相关的工作。推送完成之后就可以打开远程仓库,在 Pull Requests 栏目下可以看到提示创建一个新的 PR。
创建 PR 之后,如果通过了代码审查(当然如果这个仓库是你自己一个人在管理,可以直接点击 「Approve」),仓库的管理员会把你的代码合并到分支中,这样基本上就完成了代码提交的工作。
first-contributions 项目
这里给大家推荐一个简单的开源项目,参与这个开源项目能让你完整地体验开源的流程。
通过 GitHub 搜索或者直接输入(https://github.com/firstcontributions/first-contributions)能很容易地找到这个项目。项目默认提供的英文版的流程,也有其他非常多的语言版本支持。
点击对应的国旗就能找到其他版本的语言支持。后文将假定你已经安装完成了 Git,如果对 Git 安装有问题,可以跳回本文第一部分重新阅读。点击这个仓库的「Fork」按钮可以在自己的 Git 中复制一个仓库,这个仓库从源仓库复制过来,但是你对自己的仓库具有完全的读写权限:
打开终端(Terminal),输入以下代码就可以将这个项目拉取到本地:
git clone "https://github.com/your-name/first-contributions.git"
将 "your-name" 修改成自己的名字,如果 「Fork」时选择的是默认的名字,那么不需要修改其他的参数。然后在本地找到这个仓库对应的文件夹,切换到这个文件夹,并创建一个自己的分支:
cd first-contributions
git checkout -b "your-branch"
使用任意的文本编辑器打开 「Contributors.md」这个文件,在这个文件的末尾加上自己的名字,比如我加上的是
- [airmelt](https://github.com/airmelt)
然后使用 add 和 commit 命令将这个修改保存,使用 push 命令将修改推送到远程仓库:
git add Contributors.md
git commit -m "commit comment"
git push -u origin your-branch
由于是第一次提交,需要加上 -u 参数。然后打开原仓库,注意不是自己的仓库,提交一个 PR。提交 PR 可以命名一个有意义的标题和添加一些说明,PR 如果没有冲突,会自动通过,通过之后会发送邮件通知,这样就完成了这个项目的贡献。
good first issue
如果上面简单的开源还是无法满足你参与开源的需求。可以从一个成熟的开源项目的 PR 中搜索 「good first issue」来完成一些适合新手的任务。
下面以我在「nerdctl」(https://github.com/containerd/nerdctl)项目的第一个贡献为例子简单说明一下如何参与一个开源项目。首先打开这个项目然后在「Issues」中搜索「good first issue」,选择一个适合自己的问题并进入。
我当时找了一个看上去比较简单的问题,应该是缺失了换行符("\n")导致的:
通过阅读它的描述和自己实际动手测试,发现是在第二行的后面缺失了换行符。定位到这个文件(其实在评论和提交的文件中都有链接),在输出中加上换行符就可以了。
接下来的一步才是比较重要的一环,参考之前提的 PR 的格式,填写 PR 的内容并完成相关测试:
这里还有一个需要注意的地方,在推送代码的时候,项目要求必须签名,实际上就是在 commit 的时候加入 -s 参数引入自己的用户名和邮箱即可。提交完 PR 之后会有一些人来审查代码,这个是一个非常难得的交流机会,尽自己所能回答他们的问题就好。