理解GitHub的Fork与Pull Request(协同开发入门)
通过之前的文章,您已经掌握了在GitHub上管理自己项目的基本流程。然而,GitHub的真正威力,更多地体现在参与他人的项目,进行协同开发之时,而非仅仅独自使用。
本次,我们将详细解说在您没有写入权限的外部项目(如开源项目)中贡献代码时,最重要且最基本的工作流程——“Fork(分叉)”与“Pull Request(拉取请求)”的概念和具体步骤。理解了这一流程,您就能迈出与全世界开发者协作的第一步。
为何需要Fork?无法直接推送(push)的原因
理所当然,您是无法直接将代码推送(上传)到他人的GitHub仓库中的。如果任何人都可以随意写入,项目岂不是会变得一团糟?这就像您没有别人家的钥匙,就不能随意闯入并重新装修一样。
那么,要如何为他人的项目做贡献呢?答案就是“Fork”。
Fork是一种功能,它能将他人的仓库完整地复制到您自己的GitHub账户下,创建一个专属于您的远程仓库。您可以把它想象成是把项目“带回家”,以便自由地进行修改的“个人副本”。对于这个您自己的仓库副本,您拥有完全的写入权限。
然后,将您在自己的仓库中完成的修改,以“我做了这些更改,您看如何?”的形式,向原项目提案的机制,就是“Pull Request”。
Fork & Pull Request的整体流程
在实际操作命令之前,我们先来把握一下整体流程。为开源项目做贡献的典型流程,由以下六个步骤构成:
- Fork: 将原始项目复制到自己的GitHub账户下。
- Clone: 将通过Fork创建的“个人”仓库复制到自己的电脑上。
- Branch: 为修改工作创建一个新的分支。
- Modify & Commit: 在自己的电脑上修改代码,并提交更改。
- Push: 将提交的内容推送到“自己的”GitHub仓库。
- 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”。在这里,您需要填写一份请求书,请求原项目将您的更改合并进去。
- Title (标题): 起一个能简明扼要说明更改内容的标题。(例如:`Fix a typo in the introduction`)
- Leave a comment (评论): 详细说明您为何进行此项修改,以及具体修正了什么。这是对审查者的礼貌。
[图片:Pull Request的创建界面,重点标出标题和说明文的输入框]
确认内容后,点击“Create pull request”按钮,您的提案就会被发送给原仓库的管理员。
第六步:等待审查与合并
创建Pull Request后,原仓库的管理员会收到通知。管理员会检查您的代码,可能会发表评论,或请求您进行额外的修改。经过沟通,如果您的更改没有问题,管理员就会将您的Pull Request合并(merge)到项目中。
[图片:您自己的Pull Request显示为“Merged”,并带有一个紫色的图标]
在合并的瞬间,您的修改就正式成为项目的一部分了。恭喜您!这就是为开源做贡献的过程。