如何使用 GitHub Flow 给开源项目贡献代码

原文连接:如何使用 GitHub Flow 给开源项目贡献代码html

GitHub 是什么?git

GitHub 是经过 Git 进行版本控制的软件源代码托管服务。
截止到 2015年,GitHub 已经有超过 2800 万注册用户和 7900 万代码库。事实上已经成为了世界上最大的代码存放网站和开源社区。

因此,若是你想要给开源项目贡献代码或者翻译文档,学会如何使用 GitHub 来正确地贡献代码是必不可少的。github

GitHub Logo

准备工做

  1. 关于 git 的基本操做。
  2. GitHub 网站的帐户。
  3. 将示例仓库 https://github.com/golang/go 记录在某处。
  4. 这里咱们假设你的用户名为 yourname

复制(fork)一个仓库的副本

打开示例仓库的 URL,在右上角点击 Fork 按钮后,开始等待完成。golang

Fork Go 语言源码仓库副本

等待的时间视仓库的大小而定。shell

fork 完成后,你应该能够在你本身的 GitHub 仓库看到同名的一个项目。并发

它的 URL 应该为:https://github.com/yourname/gopost

Fork 以后的样子

发现了吗?这里 URL 的变化只不过是将本来的 golang 替换成了 yournamefetch

这个 fork 后的项目是你本身能够随意修改而不会影响到真正的 go 项目的。下面咱们把它称之为副本仓库。网站

在没有示例仓库的 push 权限的状况下,想要作出的修改可以反映到示例仓库,也就是原始仓库,还须要作接下来的一些操做。spa

克隆(clone)副本仓库到本地

把你 fork 后的副本仓库 clone 到本地。

git clone https://github.com/yourname/go go # clone 到本地的 go 目录

使用分支(branch)

进入仓库目录后,可使用以下命令建立并切换到 test 分支。

git checkout -b test # 建立并切换到 test 分支

在本地仓库提交(commit)

在这个 test 分支下通过一些修改后,你须要提交这些修改到本地仓库。

可使用相关命令:

git add -A # 添加全部文件
git commit -m 'Add test' # 提交 commit

先别急着 push,咱们还有个大问题要解决。

跟原始仓库(upstream)合并

前面已经说过,在副本仓库作的修改是不会影响到原始仓库的。一样,在原始仓库的更新也不会反映到副本仓库来。

在 GitHub,若是你副本仓库的进度落后于原始仓库还坚持发起 Pull Request,后果只会是被拒绝。

那么问题来了,咱们应该如何同步原始仓库的更新呢?

答案是:区别于 origin,它是用来向副本仓库提交更新的远程仓库;咱们添加一个 upstream,也被称为 上游 是专门用来同步原始仓库更新的远程仓库。

在默认状况下,在你 clone 后的仓库目录里,git 已经自动将 origin 和你的副本仓库关联在一块儿了,也就是 https://github.com/yourname/go

你能够经过以下命令查看。

git remote -vv # 两个 verbose 参数查看远程仓库

而后,经过以下命令添加这个 upstream,使用这个名字只是约定俗成,你能够用你以为更好的名字来替换它。

git remote add upstream git@github.com:golang/go.git # 添加 upstream 远程仓库

如今,咱们假设在作出修改后,上游(upstream)已经更新了不少提交。

此时若是对上游的变化视而不见,强行 push 并发起 Pull Request 仍是会被拒绝。

能够经过以下命令拉取并合并上游的更新:

git checkout master # 切换到默认存在的 master 分支
git pull --rebase upstream master:master # 使用 rebase 模式拉取 upstream/master 上的更新
# 且与本地的 master 合并。第一个 master 是远程分支,第二个是本地分支。
git checkout test # 切换到前面创建的 test 分支
git rebase master # 使用 rebase 模式合并本地的 test 和 master 分支

也能够经过另外一种方式:

git checkout master # 切换到 master 分支
git fetch upstream master # 获取 upstream 上的 master 分支
git checkout test
git rebase upstream/master # 使用 rebase 模式合并本地的 test 和 upstream/master 分支

总的来讲,能够把本地的 master 分支看成一个只负责从上游获取更新的分支,全部本地的改动都不会直接在 master 上面进行。

而是先将上游的 master 和本地的 master 合并,此时,本地的 master 是上游的最新版本;

再经过合并 test 和本地的 master 来完成本地改动的更新。整个过程在未开始合并以前,你的代码更新应该只会出如今 test 分支上。

注意:在使用 git rebase 相关的命令时,须要谨慎应用在已经提交的更新或远程仓库上

推送(push)到副本仓库

如今,咱们已经完成代码的修改、上游的同步更新而且完成了合并。

接下来应该将代码 push 到副本仓库。

git push origin test # 将本地 test 分支的代码 push 到 origin 的 test 分支
# 若是该分支不存在则会建立

这个 push 只会更新副本仓库,并不会影响到原始仓库。

要将代码贡献到原始仓库,还要发起 Pull Request

发起合并请求(Pull Request)

现代的 GitHub 网站已经为咱们发起 Pull Request 作了大多数的幕后工做。下面分别说明两种方法:

  • push 代码后,直接登陆到 GitHub 网站,它会智能识别并弹出按钮 Compare & pull request,点击后填写一些信息便可发起。 Compare & pull request 方式
  • 还有一种方式,在副本仓库的页面点击你更新的分支,再点击 New pull Request

New pull request 方式

出现以下界面:

New pull request 操做界面

再点击 Create pull request 后填写一些信息便可。

接下来,原始项目的相关负责人就会审查(review)你的提交,并决定是经过仍是拒绝。

  • 当你的提交有问题时,负责人还会让你作出一些修改才给予经过。
  • 当你发现想要对其贡献代码的开源项目已经好久没有更新时,须要谨慎一些。不然会发如今你发起 Pull Request 后无人理会,作了许多无谓的工做。发生这种状况多是负责人已经放弃了这个项目。 多年未维护的项目

至此,咱们已经完成使用 GitHub Flow 向开源项目贡献代码的所有步骤。

参考连接

Git 工做流程

如何在 Github 给开源项目贡献代码

相关文章
相关标签/搜索