文档章节

Git工作流指南:Pull Request工作流

Lien_
 Lien_
发布于 2015/08/27 18:40
字数 2725
阅读 16
收藏 0
点赞 0
评论 0

Pull RequestsBitbucket上方便开发者之间协作的功能。提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论。

开发者向团队成员通知功能开发已经完成,Pull Requests是最简单的用法。开发者完成功能开发后,通过Bitbucket账号发起一个Pull Request。这样让涉及这个功能的所有人知道,要去做Code Review和合并到master分支。

但是,Pull Request远不止一个简单的通知,而是为讨论提交的功能的一个专门论坛。如果变更有任何问题,团队成员反馈在Pull Request中,甚至push新的提交微调功能。所有的这些活动都直接跟踪在Pull Request中。

相比其它的协作模型,这种分享提交的形式有助于打造一个更流畅的工作流。SVNGit都能通过一个简单的脚本收到通知邮件;但是,讨论变更时,开发者通常只能去回复邮件。这样做会变得杂乱,尤其还要涉及后面的几个提交时。Pull Requests把所有相关功能整合到一个和Bitbucket仓库界面集成的用户友好Web界面中。

解析Pull Request

当要发起一个Pull Request,你所要做的就是请求(Request)另一个开发者(比如项目的维护者),来pull你仓库中一个分支到他的仓库中。这意味着你要提供4个信息(源仓库、源分支、目的仓库、目的分支),以发起Pull Request

这些值多数Bitbucket都会设置上合适的缺省值。但取决你用的协作工作流,你的团队可能会要指定不同的值。上图显示了一个Pull Request请求合并一个功能分支到正式的master分支上,但可以有多种不同的Pull Request用法。

工作方式

Pull Request可以和功能分支工作流Gitflow工作流Forking工作流一起使用。但Pull Request要求要么分支不同,要么仓库不同,所以不能用于集中式工作流。在不同的工作流中使用Pull Request会有一些不同,但基本的过程是这样的:

  1. 开发者在本地仓库中新建一个专门的分支开发功能。

  2. 开发者push分支修改到公开的Bitbucket仓库中。

  3. 开发者通过Bitbucket发起一个Pull Request

  4. 团队的其它成员review code,讨论并修改。

  5. 项目维护者合并功能到官方仓库中并关闭Pull Request

本文后面内容说明,Pull Request在不同协作工作流中如何应用。

在功能分支工作流中使用Pull Request

功能分支工作流用一个共享的Bitbucket仓库来管理协作,开发者在专门的分支上开发功能。但不是立即合并到master分支上,而是在合并到主代码库之前开发者应该开一个Pull Request发起功能的讨论。

功能分支工作流只有一个公开的仓库,所以Pull Request的目的仓库和源仓库总是同一个。通常开发者会指定他的功能分支作为源分支,master分支作为目的分支。

收到Pull Request后,项目维护者要决定如何做。如果功能没问题,就简单地合并到master分支,关闭Pull Request。但如果提交的变更有问题,他可以在Pull Request中反馈。之后新加的提交也会评论之后接着显示出来。

在功能还没有完全开发完的时候,也可能发起一个Pull Request。比如开发者在实现某个需求时碰到了麻烦,他可以发一个包含正在进行中工作的Pull Request。其它的开发者可以在Pull Request提供建议,或者甚至直接添加提交来解决问题。

Gitflow工作流中使用Pull Request

Gitflow工作流和功能分支工作流类似,但围绕项目发布定义一个严格的分支模型。在Gitflow工作流中使用Pull Request让开发者在发布分支或是维护分支上工作时,可以有个方便的地方对关于发布分支或是维护分支的问题进行交流。

Gitflow工作流中Pull Request的使用过程和上一节中完全一致:当一个功能、发布或是热修复分支需要Review时,开发者简单发起一个Pull Request,团队的其它成员会通过Bitbucket收到通知。

新功能一般合并到develop分支,而发布和热修复则要同时合并到develop分支和master分支上。Pull Request可能用做所有合并的正式管理。

Forking工作流中使用Pull Request

Forking工作流中,开发者push完成的功能到他自己的仓库中,而不是共享仓库。然后,他发起一个Pull Request,让项目维护者知道他的功能已经可以Review了。

在这个工作流,Pull Request的通知功能非常有用,因为项目维护者不可能知道其它开发者在他们自己的仓库添加了提交。

由于各个开发有自己的公开仓库,Pull Request的源仓库和目标仓库不是同一个。源仓库是开发者的公开仓库,源分支是包含了修改的分支。如果开发者要合并修改到正式代码库中,那么目标仓库是正式仓库,目标分支是master分支。

Pull Request也可以用于正式项目之外的其它开发者之间的协作。比如,如果一个开发者和一个团队成员一起开发一个功能,他们可以发起一个Pull Request,用团队成员的Bitbucket仓库作为目标,而不是正式项目的仓库。然后使用相同的功能分支作为源和目标分支。

2个开发者之间可以在Pull Request中讨论和开发功能。完成开发后,他们可以发起另一个Pull Request,请求合并功能到正式的master分支。在Forking工作流中,这样的灵活性让Pull Request成为一个强有力的协作工具。

示例

下面的示例演示了Pull Request如何在在Forking工作流中使用。也同样适用于小团队的开发协作和第三方开发者向开源项目的贡献。

在示例中,小红是个开发,小明是项目维护者。他们各自有一个公开的Bitbucket仓库,而小明的仓库包含了正式工程。

小红fork正式项目

小红先要fork小明的Bitbucket仓库,开始项目的开发。她登陆Bitbucket,浏览到小明的仓库页面,
Fork按钮。

然后为fork出来的仓库填写名字和描述,这样小红就有了服务端的项目拷贝了。

小红克隆她的Bitbucket仓库

下一步,小红克隆自己刚才fork出来的Bitbucket仓库,以在本机上准备出工作拷贝。命令如下:

git clone https://user@bitbucket.org/user/repo.git

请记住,git clone会自动创建origin远程别名,是指向小红fork出来的仓库。

小红开发新功能

在开始改代码前,小红要为新功能先新建一个新分支。她会用这个分支作为Pull Request的源分支。

“`
git checkout -b some-feature

编辑代码

git commit -a -m “Add first draft of some feature”
“`

在新功能分支上,小红按需要添加提交。甚至如果小红觉得功能分支上的提交历史太乱了,她可以用交互式rebase来删除或压制提交。对于大型项目,整理功能分支的历史可以让项目维护者更容易看出在Pull Request中做了什么内容。

小红push功能到她的Bitbucket仓库中

小红完成了功能后,push功能到她自己的Bitbucket仓库中(不是正式仓库),用下面简单的命令:

git push origin some-branch

这时她的变更可以让项目维护者看到了(或者任何想要看的协作者)。

小红发起Pull Request

Bitbucket上有了她的功能分支后,小红可以用她的Bitbucket账号浏览到她的fork出来的仓库页面,点右上角的【Pull Request】按钮,发起一个Pull Request。弹出的表单自动设置小红的仓库为源仓库,询问小红以指定源分支、目标仓库和目标分支。

小红想要合并功能到正式仓库,所以源分支是她的功能分支,目标仓库是小明的公开仓库,而目标分支是master分支。另外,小红需要提供Pull Request的标题和描述信息。如果需要小明以外的人审核批准代码,她可以把这些人填在【Reviewers】文本框中。

创建好了Pull Request,通知会通过Bitbucket系统消息或邮件(可选)发给小明。

小明review Pull Request

在小明的Bitbucket仓库页面的【Pull Request】Tab可以看到所有人发起的Pull Request。点击小红的Pull Request会显示出Pull Request的描述、功能的提交历史和每个变更的差异(diff)。

如果小明想要合并到项目中,只要点一下【Merge】按钮,就可以同意Pull Request并合并到master分支。

但如果像这个示例中一样小明发现了在小红的代码中的一个小Bug,要小红在合并前修复。小明可以在整个Pull Request上加上评注,或是选择历史中的某个提交加上评注。

小红补加提交

如果小红对反馈有任何疑问,可以在Pull Request中响应,把Pull Request当作是她功能讨论的论坛。

小红在她的功能分支新加提交以解决代码问题,并push到她的Bitbucket仓库中,就像前一轮中的做法一样。这些提交会进入的Pull Request,小明在原来的评注旁边可以再次review变更。

小明接受Pull Request

最终,小明接受变更,合并功能分支到master分支,并关闭Pull Request。至此,功能集成到项目中,其它的项目开发者可以用标准的git pull命令pull这些变更到自己的本地仓库中。

下一站

到了这里,你应该有了所有需要的工具来集成Pull Request到你自己的工作流。请记住,Pull Request并不是为了替代任何基于Git的协作工作流,而是它们的一个便利的补充,让团队成员间的协作更轻松方便。

本文转载自:http://blog.jobbole.com/76854/

共有 人打赏支持
Lien_
粉丝 0
博文 8
码字总数 503
作品 0
成都
程序员
深入理解学习Git工作流

个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢...

Yomut ⋅ 2015/07/08 ⋅ 0

深入理解学习Git常用工作流

个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢...

xirong ⋅ 2015/06/18 ⋅ 25

开源 Git 插件--Git Town

Git Town 是开源的 Git 插件,可以添加 Git 命令,使得软件协作开发更高效更安全。Git Town 支持常规和高级别的 Git 工作流。 Git Town 提供以下这些额外的 Git 命令: 开发工作流 git hack...

叶秀兰 ⋅ 2015/11/02 ⋅ 0

深入理解学习Git工作流(git-workflow-tutorial)

一、译序 二、Git工作流指南 2.5.1 解析Pull Request 2.5.2 工作方式 2.5.3 在功能分支工作流中使用Pull Request 2.5.4 在Gitflow工作流中使用Pull Request 2.5.5 在Forking工作流中使用Pul...

北方人在上海 ⋅ 2016/02/27 ⋅ 0

Git 分布式工作流程

本文介绍使用 Git 参与项目开发的各种流程和模式,比如 Github 上大名鼎鼎的 fork+pull 模式。 本文是《Pro Git》阅读笔记整理,疏漏之处,还请阅读原作。 1. 概述 1.1 集中式工作流程 一个存...

arniu ⋅ 2014/04/17 ⋅ 0

Git初学者的7个建议

第一条:花时间去学习Git的基本操作 学习Git的基本操作并不是要求你把整个Git文档从头到尾读完(但如果这就是你的方式,我也不会反对)。 Git里面有太多的教育内容,我很确定里面一定有对你胃...

peasant ⋅ 2013/12/31 ⋅ 0

大话 Git 工作流

深圳的秋天,比全国大多数地方都来得更晚。在经过忽冷忽热的挣扎中,天气渐渐转凉。 这天是周末,晚上天气凉爽,小刘,小李,小高,小陈四个人,约好一起来撸串。他们是大学同学,学的是计算...

小哥哥 ⋅ 2016/01/21 ⋅ 0

写给Git初学者的7个建议

当我刚刚开始使用Git的版本控制时,我根本不确定我付出那么多时间是不是会得到回报。Branch、Stage、Stash,这些Git名词对我来说都非常陌生。 而今天的我已不能想象生活没有Git会变成什么样。...

罗树鹏 ⋅ 2013/10/31 ⋅ 5

我勒个去,你怎么把这种问题代码提交到仓库啊??

我已经疯了,今天公司新来的小白提交了好了问题代码到项目仓库,最要命的是项目在线上跑不起来时费劲好大力气,检查了各种可能性,甚至还一度怀疑是不是数据库、应用服务器有问题呢。花了半个...

码云Gitee ⋅ 05/11 ⋅ 0

Git Fork和PullRequest

Fork相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull request,这样原项目的作者就可以将你修改的东西合并到原项目的主...

风铃渡LOVE ⋅ 2016/07/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Thrift RPC实战(二) Thrift 网络服务模型

TServer类层次体系 TSimpleServer/TThreadPoolServer是阻塞服务模型 TNonblockingServer/THsHaServer/TThreadedSelectotServer是非阻塞服务模型(NIO) 1 TServer抽象类的定义 内部静态类Args的...

lemonLove ⋅ 7分钟前 ⋅ 0

vim命令用法

第五章 vim命令 vim和vi几乎是一样的,唯一的区别就是当编辑一个文本时,使用vi不会显示颜色,而使用vim会显示颜色。 vim有三个模式:一般模式,编辑模式,命令模式。 系统最小化安装时没有安...

弓正 ⋅ 9分钟前 ⋅ 0

MyBatis源码解读之配置

1. 目的 本文主要介绍MyBatis配置文件解析,通过源码解读mybatis-config.xml(官方默认命名)、Mapper.xml 与Java对象的映射。 2. MyBatis结构 查看大图 MyBatis结构图,原图实在太模糊了,所以...

无忌 ⋅ 12分钟前 ⋅ 0

Ignite的jdbc与网格的连接方式的查询性能对比

环境: 数据量100万 Ignite2.5 Windows10 8g jdbc方式连接 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; i......

仔仔1993 ⋅ 27分钟前 ⋅ 0

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 43分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 50分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 57分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 58分钟前 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 今天 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部