Pull请求是一个非常棒的方式,通过fork一个新的代码库用来独立开发,并将变更贡献回原始代码库。在一天结束的时候,如果我们愿意,我们可以发送一个pull请求给代码库所有者,来合并我们的代码更改。Pull请求本身可以引起合作者之间的评论,包括代码质量,功能,甚至总体战略等。
现在让我们浏览一个pull请求的基本步骤。
发起一个Pull请求
GitHub有两种Pull请求方式:
- Fork & Pull 方式 – 用于在公共库中,我们没有推送(push)权限。
- 共享库方式 – 用于私有代码仓库,我们有推送(push)权限。这种情况下没有必要进行fork。
下面的工作流程是在两个用户(原始代码库拥有者,和fork代码库拥有者)之间的fork-pull方式:
-
进入你想贡献修改的GitHub代码库,单击“Fork”按钮来创建自己的Github帐户上的代码库克隆:
-
这将在自己的帐户上创建一个该代码库的复制:
-
选择 SSH URL,那样它会自动使用你自己的SSH密钥,而不用每次在git pull或者push时询问你的用户名和密码。下一步,我们将克隆一份代码库到本地计算机:
$ git clone [ssh-url] [folder-name] $ cd [folder-name]
-
一般情况下,每一个新的功能,我们将创建一个新的Git分支。这是一个很好的做法,因为在未来,如果经过一番讨论后我们需要进一步更新分支,Pull请求将被自动更新。让我们创建一个新的分支做一个非常简单的变化修改的readme.md文件:
$ git checkout -b [new-feature]
-
在为这个新功能增加文件后,我们只需要将修改提交到这个新分支上,然后切换回master分支:
$ git add . $ git commit -m "information added in readme" $ git checkout master
-
在这里,我们需要将新分支推送到远程代码仓库里。首先,我们需要检查这个新功能的分支名称以及其在远程仓库的别名,然后我们用
git push [git-remote-alias] [branch-name]
推送这个变更。$ git branch * master readme $ git remote -v origin git@github.com:[forked-repo-owner-username]/[repo-name].git (fetch) origin git@github.com:[forked-repo-owner-username]/[repo-name].git (push) $ git push origin readme
-
进入我们fork的代码库的GitHub页面,选择为这个新功能建立的分支,然后点击
Pull Request
按钮:id="iframe_0.5736278258840728" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://cdn.tutsplus.com/net.tutsplus.com/authors/sayanee-basu/github-team-pull-request.png?_=3950778%22%20style=%22border:none;max-width:849px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5736278258840728',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 19px; height: 19px;">
-
提交Pull请求后,页面将直接跳转到原始库的Pull请求页面,我们将看到我们提交的Pull请求,作为一个新的问题,以及作为一个新的pull请求。
-
在经过讨论后,fork的代码库的作者可能想为这个新功能增加一些新的改动。在这种场景下,我们需要在本地计算机上checkout这个同样的分支,修改,提交,并推送回GitHub。当我们再次访问原代码库的pull请求页面的时候,会发现上次提交的Pull请求已经自动更新了。
合并一个Pull请求
如果你是原始代码库的所有者,你将有两种方式来合并收到的Pull请求。
-
直接在GitHub上合并:如果我们想直接在GitHub上进行合并,必须确保没有冲突。原始库的所有者可以通过简单地点击
Merge Pull Request
按钮来进行合并:
-
在本地计算机上进行合并:另外一种情况,合并的时候可能会遇到冲突,点击上部的
Info
图标,GitHub有非常清晰的指导,怎么从贡献者的分支上下拉代码变更到本地,合并并解决冲突。
在软件开发团队中有很多不同的代码分支模型。这里有两种非常常用的工作流程模型:
至于采用何种分支模型,取决于团队,项目,以及当时的状态。