好代码是管出来的——Git的分支工作流与Pull Request (4)

  

好代码是管出来的——Git的分支工作流与Pull Request

  但是对于集成管理者工作流来说,集成管理者要如何知道有代码需要合并?要如何合并代码?Git中引入了pull request这一功能彻底的改变了代码的合并方式,这一特性也让其成为开源专用的版本控制工具。
  pull request是什么?用中文翻译过来是“拉请求”,假设以下场景:
  1. Selim开发了一个应用程序My Blog,并通过某一Git远程托管平台对代码进行了托管。
  2. 7m鱼复制了Selim托管的库,然后在App上添加了一个新功能feature1。
  3. 现在7m鱼想要将新功能合并到Selim的分支上应该如何操作?如下图所示:

   

好代码是管出来的——Git的分支工作流与Pull Request

  首先可以想到的就是使用上面提到的方法切换到Selim的master分支,然后执行git merge Feature1命令,但是如果7m鱼没有Selim/Master的修改权限呢?Selim/Master是属于Selim的,7m鱼无法修改(典型的集成管理者模式,这里“Selim”就是集成管理者),为了解决这个问题Git实现了“Pull Request(拉请求)”,注意是“拉(pull)”不是“推(push)”,这个请求的目的是让仓库所有者来“拉”取变化,由所有者来决定合并还是拒绝,所有者可以根据功能是否合理、代码是否正确、易读等信息进行判断,这实际上就是CodeRview的过程。
  下面创建一个新的代码仓库来演示Git的Pull Request,Pull Request的要求就是需要两个远程分支(仓库)进行合并(代码拥有者的分支和代码贡献者的分支):
  1. 克隆My Blog代码,创建一个新的远程仓库(本例使用GitHub作为托管平台,可以直接fork):
  git clone https://github.com/yqszt/MyBlog.git
  git remote add other https://github.com/SelimTeam/MyBlog.git
  git push -u other
  新建的远程仓库:

  

好代码是管出来的——Git的分支工作流与Pull Request

  2. 在克隆的代码中修改内容并提交:

  

好代码是管出来的——Git的分支工作流与Pull Request

  3. 要将这两次提交生成“pull request”:
  使用git request-pull命令生成拉请求信息:
  git request-pull -p 5bf2e35 https://github.com/SelimTeam/MyBlog.git master

  

好代码是管出来的——Git的分支工作流与Pull Request

  其中p代表输出详细内容(代码的差异),5bf2e35对应的是提交的hash,代表更新的内容是从哪一个提交开始,url代表的是贡献者的仓库地址,最后的master代表更新内容结束的提交,默认是分支的最新提交
  4. 将pull request信息告知作者,作者将会知道贡献者的仓库地址分支从哪一个提交开始哪一个提交结束,并且带有详细的变更信息
  注:这里的告知是通过邮件等方式将上面request-pull命令生成的信息发送给作者,github等平台上提供的pull request功能是由平台自己实现的通知方式,关于github上的pull request后续介绍。
  5. 作者添加贡献者的远程仓库,获取并将更新合并到主分支:
  git remote add selimteam https://github.com/SelimTeam/MyBlog.git
  git fetch selimteam master
  git diff master selimteam/master

  

好代码是管出来的——Git的分支工作流与Pull Request

  git merge selimteam/master

  

好代码是管出来的——Git的分支工作流与Pull Request

  git push
  以上就完成了一次通过pull request像作者贡献代码的流程。

Git常用的GUI工具

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxfff.html