tt-up / fed-in-depth

经验、知识、笔记——让坚持学习成为一种习惯
6 stars 1 forks source link

玩转 GitHub 之我的第一个 PR #4

Open yuqingc opened 4 years ago

yuqingc commented 4 years ago

下面以 tt-up/fed-in-depth 为例,来教你如何创建第一个 PR。改方法适用于 GitHub 的任何开源项目。一起来学习一下吧。

1. Clone 主仓库

进入项目的主页,复制项目的地址

image

执行命令复制到本地

$ git clone git@github.com:tt-up/fed-in-depth.git

2. Fork

Why Fork?

熟悉使用 GitLab 工作的同学可能习惯于在公共 repo 直接创建一个分支(branch),然后直接使用这个分支发起一个 “Merge Request” 以将自己的分支合并到其他分支,比如 master 分支。这种方法同样可以在 GitHub 上使用,但是咱们不推荐这么做。因为 GitHub 上的开源项目往往是有很多来自世界各地的开发者一起合作开发的,如果每个开发者都有权限在 GitHub 的项目主仓库(主仓库,指的是项目的原始仓库,和后文的 fork 仓库区分开),那么久而久之,主仓库就会有成千上万的分支,非常不容易维护。因此,我们常常需要把主仓库拷贝一份到自己的名下,这样,咱们自己就可以在自己复制过来的仓库随意倒腾啦,包括创建新的分支。等我们在自己拷贝过来的这个的仓库创建新的分支后,我们就可以用自己的分支向主仓库的分支发起 PR 啦。这个“拷贝”的动作,我们叫做“Fork”。

如何 Fork?

  1. 进入你向参与贡献的开源项目主页,点击 Fork 按钮。我们仍然以咱们的 tt-up/fed-in-depth 为例 image

  2. 选择需要 Fork 的目标地址。点击 Fork 之后,GitHub 会弹出对话框让你选择需要 Fork 的目标。因为有些用户会属于其他组织,所以你可以在弹窗中选择目标地址。一般情况下,选择自己就可以了。 image

  3. Fork 完成之后,会自动跳转到复制过后的项目主页,从标题或者地址可以看出,这个项目目前已经在你的名下。因为它在你的名下,所以你拥有对这个 Fork 仓库的所有权限,如 push 等。 image

3. 配置本地的远程仓库别名

  1. 在本地进入刚刚拷贝的仓库,此时输入以下命令可以看到当前远程仓库 origin 指向了主仓库
    $ git remote -v
    origin  git@github.com:tt-up/fed-in-depth.git (fetch)
    origin  git@github.com:tt-up/fed-in-depth.git (push)
  2. 复制过来的仓库,以下简称 Fork 仓库。在 Fork 仓库下,你同样可以复制 git 的 URL。复制这个 URL,接下来我们要把这个 URL 加到你本地的 remote 仓库别名中。 image
$ git remote add yuqingc git@github.com:yuqingc/fed-in-depth.git

注意:originyuqingc 分别的主仓库和 Fork 仓库的别名。你可以起自己喜欢的名字。比如如果你要命名 Fork 仓库为 fork,则上面的命令需替换为 git remote add fork 【远程Fork仓库地址】

此时再查看远程仓库别名可以看到刚刚添加的 yuqingc

$ git remote -v
origin  git@github.com:tt-up/fed-in-depth.git (fetch)
origin  git@github.com:tt-up/fed-in-depth.git (push)
yuqingc git@github.com:yuqingc/fed-in-depth.git (fetch)
yuqingc git@github.com:yuqingc/fed-in-depth.git (push)

注意:如果你是直接从 Fork 仓库克隆到本地,那么 origin 别名会默认指向 Fork 仓库,此时你需要添加主仓库别名。比如我要把主仓库添加别名为 upstream,则需要使用命令 git remote add upstream 【远程主仓库地址】。一定要注意区分。后文将会用 forkorigin 分别表示 Fork 仓库和主仓库的远程仓库别名。

4. 在新的分支进行开发

如果我要基于主仓库的 master 开发一个功能,可以基于主仓库的 master 分支新建一个分支并且将这个分支 push 到 Fork 仓库。

$ git fetch origin
$ git checkout -b my-feature-branch origin/master

注意,这里的 origin 指的是主仓库别名,你需要根据自己的主仓库别名来替换。

开发完成之后就可以 push 到自己的 Fork 仓库了

$ git push -u fork my-feature-branch

注意,这里的 fork 指的是 Fork 仓库别名,你需要根据自己的 Fork 仓库别名来替换。

5. 创建新的 PR

进入 GitHub 你的 Fork 仓库或者主仓库主页,点击 Pull Request,并点击 New Pull Request image

当 GitHub 检测到有新的分支时候,也会自动出现提示你发 PR 的按钮

确认你的分支和需要合并的目标分支,点击 Create pull request 即可 image

创建完成之后,快喊你的小伙伴来给你 Review 代码吧!

注意:一般情况下,你的 PR 被 merge 之后,你的分支就可以删除了。如果要提新的功能,建议重新拉分支提交。因为很多情况下,Repo 的维护者会把你的 PR 的好几个 Commit 压缩成一个,我们成为 Squash,这样你的分支的 commit 历史就和主仓库的不同了。如果你在原有的分支继续开发,并且发新的 PR 的话,就会导致你的内容和远程的内容存在冲突。如果没看懂没关系,记住,新的 PR 就拉新的分支就好了。

完(欢迎补充)