什么是复刻(forking)?

我们可以通过复刻操作将喜爱的仓库保存自己的GitHub账户中,以便独立地对其进行操作。

通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响到原始仓库。

什么是拉取请求(pull request)?

拉取请求是为团队项目或开源项目做贡献的一种方式。

例如,一个名为Harry forks的用户复刻了一个属于ThanoshanMV的仓库并对其做了一些变更,Harry可以向ThanoshanMV发起一个拉取请求,不过是否接受取决于ThanoshanMV。这就好像是在说:“ThanoshanMV,你可以拉取我所做的变更吗?”。

为开源项目做贡献

除了编写代码,还有许多其他方式可以为开源项目做贡献。下面介绍一些可选的贡献方式。

99xtechnology  资讯科技公司的骇客入门指南为我们介绍了以下几种为开源项目做贡献的方式:

设计工作:构建整个项目的布局,提升可用性,提升导航和菜单的用户体验,创作项目logo和艺术T恤,提供样式指导等。

文档工作:编写、完善或者翻译项目文档,编写项目相关的时事通讯,编写教程,筛选邮件列表中的亮点内容,创建项目使用示例合辑等。

整理工作:链接重复的议题,提议新的议题标签,提议关闭过时的未解决议题,针对近期的议题抛出问题以推动相关讨论。

提供帮助:在议题下解答问题,审查他人提交的代码,为其他贡献者提供指导。

编写代码:协助解决议题中提及的问题,询问是否需要自己提供帮助来增加新的功能特性或改进工具和测试流程。

创建第一个拉取请求!

如果你还不太熟悉 Git 和 GitHub, 请查看  The beginner’s guide to Git & GitHub.

1. 复刻仓库

点击页面顶部的“fork”按钮即可复刻仓库,这将在你的账户中创建此仓库的完整实例。

image-46
image-47

2. 克隆仓库

现在你的账户中已经包含了这个仓库,将它克隆到本地来进行编辑。

点击“clone”按钮,复制下面的链接。

image-48

打开终端并执行如下命令,把仓库克隆到本地。

$ git clone [HTTPS ADDRESS]

image-49

现在我们建立了远程仓库的master分支的一个副本。

运行如下命令,进入项目目录:

$ cd [NAME OF REPOSITORY]

image-50

3. 创建一个分支

不管是对于小项目还是团队协作的项目,使用仓库时,最好新建一个分支。

分支名称应该保持简短,并且能够反映我们所做的工作。

使用  git checkout  命令来创建一个分支:

$ git checkout -b [Branch Name]

image-51

4. 进行更改并提交

对项目进行必要的更改并保存。

执行  git status  , 查看变更。

image-52

执行  git add  命令,将这些变更加入到刚刚创建的分支:

$ git add .

image-53

使用  git commit  提交这些变更:

$ git commit -m "Adding an article to week 02 of articles of the week"

image-54

5. 把变更推送到GitHub

在推送变更之前先确认远程库的名称。

$ git remote

image-55

当前仓库对应的远程库名称是“origin”。

确认了远程库的名称之后,可以放心的把变更推送到GitHub。

git push origin [Branch Name]

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f6272616e6368322e706e67

6. 创建拉取请求

在GitHub仓库中可以看到一个“Compare & pull request”按钮,点击它。

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f636f6d706172652e706e67

请提供必要的说明来介绍你所做的变更(可以使用“#”来引用议题)。提交拉取请求。

恭喜!你已经成功创建了第一个拉取请求。

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f70756c6c526571756573742d312e706e67

如果拉取请求被接受的话,你将会收到邮件通知。

7. 同步复刻的master分支

在向原始仓库提交拉取请求之前,必须先将原始仓库的最新内容同步到本地仓库。

即使没打算提交拉取请求也应该及时同步,因为自你复刻仓库之后,原始仓库中的项目可能添加了一些新的功能特性或者修复了一些bug。

按照以下步骤来更新你的master分支:

  1. 首先查看当前所在分支。
$ git branch

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f6272616e6368342e706e67

这将列出所有分支,并以绿色来指明当前或活动分支。

2. 切换到master分支。

$ git checkout master

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f6d6173746572392e706e67

3. 将原始仓库添加为upstream仓库。

为了能够拉取原始仓库的变更到你的复刻仓库中,需要将原始仓库添加为upstream仓库。

$ git remote add upstream [HTTPS]

这里的 [HTTPS] 是你从原始仓库页面复制的URL。

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f6f776e65722d7265706f2e706e67
68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f72656d6f74652d6164642e706e67

4. 获取原始仓库的变更

从原始仓库获取变更,所有提交到原始仓库的变更将会保存在本地的upstream/master分支中。

$ git fetch upstream

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f66657463682e706e67

5. 合并变更

将upstream/master分支中的变更合并到本地的master分支,这样就能够做到让本地的master分支与原始仓库保持同步的同时保留本地变更。

$ git merge upstream/master

6. 把变更推送到GitHub

现在你的本地分支已经原始仓库的master分支同步了。如果想更新GitHub仓库,需要把变更推送到GitHub。

$ git push origin master

注意:  在同步了master分支之后,可以移除upstream仓库。不过以后同步的时候还会用到,所以最好留着它。

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f72656d6f74652d646c742e706e67
$ git remote rm [Remote Name]

8. 删除无用的分支

创建分支是为了完成一些特定目标,目标完成之后,这些分支就没必要继续存在了,可以删除掉。

$ git branch -d [Branch Name]

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f64656c6574652e706e67

GitHub上的无用分支也可以删除。

git push origin --delete [Branch Name]

68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30312f6c6173742e706e67

总结

GitHub是一个强大的版本历史控制工具,每一个人都可通过发起拉取请求来为开源项目做贡献,而且除了编写代码之外还有许多方式可以做出贡献。

最后要说的是,如果你的拉取请求没有被接受也不要感到困惑,维护者们花费了大量的时间精力来优化项目,他们比我们更加了解整个项目,所以他们知道如何做出合理选择。

Stay strong, stay positive, and never give up.
― Roy T. Bennett,  The Light in the Heart

文章首发于  Medium

联系作者  Twitter

请继续为开源世界做贡献!

原文:How to make your first pull request on GitHub,作者:Thanoshan MV