Git 分支管理与开发流程

参考连接

http://www.ituring.com.cn/article/56870

http://semver.org/lang/zh-CN/

http://blog.csdn.net/jasper_hou/article/details/52200495

 

摘要:

1. 主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和development分支。

2.辅助分支是用于组织解决特定问题的各种软件开发活动的分支。辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的缺陷进行紧急修复工作。这些分支与主分支不同,通常只会在有限的时间范围内存在。

3.feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。

4.release分支是为发布新的产品版本而设计的。在这个分支上的代码允许做小的缺陷修正、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等等)。

5.除了是计划外创建的以外,hotfix分支与release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。

6.版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

   6.1 主版本号:当你做了不兼容的 API 修改,

   6.2 次版本号:当你做了向下兼容的功能性新增,

   6.3 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

7.制定coding style,并坚持代码审查。代码的规范非常重要,好的代码可以提高整体团队的开发与沟通的效率。好的代码会说话。代码审查可以结对完成,只有审查通过,才可以提交代码。可以通过创建pull request来进行代码的审查,通过之后,再merge到代码库中去。

 

个人总结:

在日常开发中,尤其是多个开发者迭代一个版本的时候,经常会遇到代码冲突,因此,建议在开发前,互相沟通好各自要改的文件,尽量避免多人同时修改一个文件的情况。


本帖拿utsoft-demos做例子,描述开发人员对项目的分支管理和代码review。

如下图:utsoft-demos是一个常见的spring项目,现在要在该项目中做个次版本号的迭代,参与该项目的有唐超和宋旋。

因此将master作为主分支,派生一个新的分支,供唐超和卢衡迭代这个版本,取名1.1.x 该命名的级别和release类似

下图是分支的权限设定,理论上,master和1.1.x都不允许开发人员直接提交代码。所以这里设定只有我可以更改,合并代码。

...

这时候唐超或宋旋在SourceTree中检出1.1.x分支到本地

并为自己派生一个开发分支 dev/chao.tang  ,这个地方,每个开发人员单独一个分支的好处是,不用关心在多个开发人员在同一个分支上开发的时候导致的代码冲突问题,但是弊端是合并到1.1.x的时候,会产生代码错误合并。另一种方法是,N个开发人员,共用一个分支,比如feature/20170215(附1)。

过了一段时间,唐超在项目里加了个接口,这时候提交到自己的本地分支中,并且做了一些修改。

这时候唐超发送自己做的功能写完了,因此打算合并到1.1.x上,所以先把本地分支推送到远端仓中,然后在Create Pull Request。

............

在Reviewers中可以艾特下宋旋,可以让他帮助阅读或提醒他阅读下自己提交的代码

此时,宋旋可以轻松的看到唐超提交的代码

打开消息后如下图

 

 

 

又过了一段时间,宋旋以同样的方式,提交了一份代码,并同样的方式,做了Create Pull Request

 

到了功能交付时间,我到这个项目里,看到了有两个Pull Request,因此我要对他们两的代码代码审查和合并

我按正常逻辑,根据提交先后,从下往上进行合并。在合并之前,我可以对代码做一些审查时的备注

代码审查完毕,就可以点击右上角的Merge按钮,Merge左边还有些实用的功能按钮(有需要的时候可以使用)。合并提示框底部的勾选框,建议勾选,因为没必要把开发人员的分支留在远端。

 

当合并宋旋的代码的时候,看到提示发生冲突,无法合并。

这时候我通知宋旋,将Pull Request Decline。修改代码正确合并。

合并冲突有两种方案,一种是在本地SourceTree里,右键1.1.x分支,选择将当前变更衍合到1.1.x(当前分支必须是 dev/xuan.song 下的时候,再做右键操作!)。另一种是直接在bitbucket里编辑文件然后做Merge(紧急的时候可以,但是通常不建议,我在这里不做说明)。

接下来,可在项目中进行代码合并动作,个人推荐这样比较安全。先切换到Synchrorize Workspace,然后标记冲突文件为已合并Mark as Merged,接着修改代码,提交,最后在SourceTree中右键HEAD合并>>继续衍合。

...................

推送到远端

再次Create Pull Request。

最后我将代码合并到1.1.x。下图的UPDATED和MERGED的头像虽然是我,实际上应该是宋旋(因为我本机做demo只登了自己帐号)

 

 

现在1.1.x 可以正式构建部署版本到测试环境,因此我本应该把1.1.x合并到master上,因为bamboo中都是针对master分支做构建。然而bitbucket自带的功能可以把1.1.x自动合并到master。如下图。

管理员或项目组长需要在bitbucket中针对本次功能迭代做如下图设置

 

过一测试期后,测试部门反馈,可以正式部署生产了,这时候我结合bamboo的功能,把测试环境对应构建产物部署到生产环境(通常需要一个灰度发布),过了灰度发布或确定可正式运行后,可以给1.1.x打一个Tag,取名1.1.8(比如现在是次版本1的第8次发布生产)。

当发生重大漏洞或缺陷的时候,需要紧急回滚至1.1.8的时候,就可以从1.1.8的Tag中派生出分支,并做一些紧急的Hotfix(附2)。

 

接下来的迭代,根据上述流程继续循环。

 

 

 

附1

feature分支

使用规范:

  • 可以从develop分支发起feature分支
  • 代码必须合并回develop分支
  • feature分支的命名可以使用除masterdeveloprelease-*hotfix-*之外的任何名称

feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。

一般而言,feature分支代码可以保存在开发者自己的代码库中而不强制提交到主代码库里。

Feature分支

 

附2

hotfix分支

使用规范:

  • 可以从master分支派生
  • 必须合并回master分支和develop分支
  • 分支命名惯例:hotfix-*

除了是计划外创建的以外,hotfix分支与release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。

当生产环境中的软件遇到了异常情况或者发现了严重到必须立即修复的软件缺陷的时候,就需要从master分支上指定的TAG版本派生hotfix分支来组织代码的紧急修复工作。

这样做的显而易见的好处是不会打断正在进行的develop分支的开发工作,能够让团队中负责新功能开发的人与负责代码紧急修复的人并行的开展工作。

Hotfix分支


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值