🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

理解GitHub的Fork与Pull Request(协同开发入门)

通过之前的文章,您已经掌握了在GitHub上管理自己项目的基本流程。然而,GitHub的真正威力,更多地体现在参与他人的项目,进行协同开发之时,而非仅仅独自使用。

本次,我们将详细解说在您没有写入权限的外部项目(如开源项目)中贡献代码时,最重要且最基本的工作流程——“Fork(分叉)”与“Pull Request(拉取请求)”的概念和具体步骤。理解了这一流程,您就能迈出与全世界开发者协作的第一步。


为何需要Fork?无法直接推送(push)的原因

理所当然,您是无法直接将代码推送(上传)到他人的GitHub仓库中的。如果任何人都可以随意写入,项目岂不是会变得一团糟?这就像您没有别人家的钥匙,就不能随意闯入并重新装修一样。

那么,要如何为他人的项目做贡献呢?答案就是“Fork”。

Fork是一种功能,它能将他人的仓库完整地复制到您自己的GitHub账户下,创建一个专属于您的远程仓库。您可以把它想象成是把项目“带回家”,以便自由地进行修改的“个人副本”。对于这个您自己的仓库副本,您拥有完全的写入权限。

然后,将您在自己的仓库中完成的修改,以“我做了这些更改,您看如何?”的形式,向原项目提案的机制,就是“Pull Request”。


Fork & Pull Request的整体流程

在实际操作命令之前,我们先来把握一下整体流程。为开源项目做贡献的典型流程,由以下六个步骤构成:

  1. Fork: 将原始项目复制到自己的GitHub账户下。
  2. Clone: 将通过Fork创建的“个人”仓库复制到自己的电脑上。
  3. Branch: 为修改工作创建一个新的分支。
  4. Modify & Commit: 在自己的电脑上修改代码,并提交更改。
  5. Push: 将提交的内容推送到“自己的”GitHub仓库。
  6. Pull Request: 从自己的仓库向原项目发送一个“请合并此更改”的请求。

如果用图来表示这个流程,大致如下:

[图解:1. 原始仓库 →(Fork)→ 2. 你的GitHub仓库 →(Clone)→ 3. 你的电脑 →(Push)→ 4. 你的GitHub仓库 →(Pull Request)→ 5. 原始仓库]


实践!为开源项目做贡献的步骤

那么,让我们来一步步地进行具体操作吧。作为练习,我们以提出一个简单的拼写错误(typo)修正方案为例来进行说明。

第一步:Fork您想贡献的仓库

首先,打开您想贡献的项目的GitHub页面。请点击页面右上角显示的“Fork”按钮。

[图片:指向GitHub项目页面上的“Fork”按钮]

之后会显示一个“Create a new fork”的界面,确认仓库名称等信息后,点击“Create fork”按钮。稍等片刻,该仓库的完整副本就会在您的GitHub账户下创建完成。

[图片:Fork创建后,在您自己账户下的仓库界面。可以看到URL已经变成您自己的用户名]

第二步:`clone`您Fork的仓库

接下来,将刚才通过Fork创建的、“位于您自己账户下”的仓库,`clone`到您的本地电脑。请注意,务必复制您自己Fork后的仓库URL,而不是原始仓库的URL

git clone git@github.com:你的用户名/fork的仓库名.git

第三步:创建工作分支

进入克隆好的文件夹,为接下来的修改工作创建一个新的分支。不在原始的`main`分支上直接修改,而是在专用的工作区进行操作,这是一种好的习惯。使用`checkout -b`可以同时完成分支的创建和切换。

cd fork的仓库名

git checkout -b fix-typo-in-readme

第四步:修改代码,然后`commit`和`push`

在本地电脑上,打开如`README.md`等文件,修正拼写错误,或进行其他任何修改并保存。修改完成后,按照之前学过的方式,使用`add`和`commit`来记录更改。

git add .

git commit -m "Fix a typo in README.md"

最后,将这个提交**推送(push)到您自己的远程仓库(即Fork来的那个)**。此时,不要忘了指定您所创建的分支名。

git push origin fix-typo-in-readme

第五步:创建Pull Request

终于到了最关键的时刻。请在浏览器中,重新打开**您Fork的那个仓库**的页面。这时,您应该会看到一个黄色的通知栏,上面写着“'fix-typo-in-readme' had recent pushes”,旁边还有一个绿色的“Compare & pull request”按钮。请点击这个按钮。

[图片:在Fork的仓库中显示的“Compare & pull request”按钮]

页面会跳转到“Open a pull request”。在这里,您需要填写一份请求书,请求原项目将您的更改合并进去。

[图片:Pull Request的创建界面,重点标出标题和说明文的输入框]

确认内容后,点击“Create pull request”按钮,您的提案就会被发送给原仓库的管理员。

第六步:等待审查与合并

创建Pull Request后,原仓库的管理员会收到通知。管理员会检查您的代码,可能会发表评论,或请求您进行额外的修改。经过沟通,如果您的更改没有问题,管理员就会将您的Pull Request合并(merge)到项目中。

[图片:您自己的Pull Request显示为“Merged”,并带有一个紫色的图标]

在合并的瞬间,您的修改就正式成为项目的一部分了。恭喜您!这就是为开源做贡献的过程。