【炼丹管理】行之有效的Git分支管理方法

1. 前言

推荐一种行之有效的Git分支管理,方便团队炼丹。


2. The main branches

main branches是指在项目中的主分支,通常有两条:masterdevelop。这两个主分支的存在于项目的整个声明周期,即创建之后不会被删除。
在这里插入图片描述

2.1 master

master:主分支,是最稳定的分支,此分支表示项目处于可发布状态。

2.2 develop

develop :开发分支,平行于主分支。此分支表示下一个版本最新交付的开发变更的状态。

备注:
develop分支中的源代码达到一个稳定点并准备发布时,所有的变更都应该合并到master中,然后用发布号进行标记(Tag)。因此,每次当develop合并到master时,这就表示一个新的版本处于可发布状态。


3. Supporting branches

除了主分支masterdevelop,本方法还使用各种supporting branches来帮助团队成员进行并行开发,简化特性跟踪,为生产版本做准备,并帮助快速修复生产问题。与main branches不同的是这些分支的生命周期总是有限的,因为它们最终会被删除。
supporting branches包括如下几种:

  • Feature branches
  • Release branches
  • Hotfix branches

每个分支都有一个特定的目的,并且受到严格的规则约束,这些规则规定哪些分支可能是它们的原始分支,哪些分支必须是它们的合并目标。

3.1 Feature branches

feature branches(有时也称为topic branches)用于为即将发布的或遥远的未来版本开发新功能。feature branches的本质是,只要feature还在开发中,它就会一直存在,但最终会被合并回develop(明确地将新feature添加到即将发布的版本中)或被丢弃(万一实验结果令人失望)。

feature branches有一下特性:

  1. 来自于develop brance
  2. 最终必须mergedevelop branch

如下图所示:
在这里插入图片描述
备注:feature branches只存在于开发者的repo中。

3.1.1 创建

当开始开发一个新功能时,从develop branch分支出来一个新的feature branch分支myfeature

$ git checkout -b myfeature develop
Switched to a new branch "myfeature"

3.1.2 合并

已经完成的功能可能会被合并到develop branch中,为加入到即将发布的版本中做准备。

$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop

注: 参数--no-ff指定Git以no fast-forward的方式进行合并,这种方式可以避免丢失feature branches历史存在的信息。no fast-forward将提交对象保存在支线,然后在主线新建一个提交对象,修改HEAD指针及新建提交对象的指针,而且此新建提交对象有两个父提交对象(即有两个parent指针);fast-forward是直接在主线(合并主分支)上,添加这些提交对象,即直接移动HEAD指针。这两种方法合并后分支指向不同:快速推进合并后,两个分支将同时指向最新提交对象,而非快速推进合并后,合并主分支指向新建的提交对象,另一分支指向不变。如下图所示:
在这里插入图片描述
在后一种情况下,不可能从Git历史中看到哪些提交对象一起实现了某个feature——除非人工读取所有日志消息。

3.2 Release branches

该分支用来发布新版本。此分支可以做非常小的Bug修复,也可以规定禁止在此类型分支上做任何Bug修复,只用来做版本发布的相关工作。

release branches有一下特性:

  1. develop branch分支创建;
  2. 完成后合并到developmaster分支;
    develop分支出一个新release分支的关键时刻是当develop(几乎)反映了新发布的期望状态时。至少所有针对即将构建的版本的特性都必须在这个时间点被合并到develop中。分配发布版本的版本号正是在release分支开始的时候。

3.2.1 创建

release branchesdevelop branch创建。

$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)

这个新的分支可能会在那里存在一段时间,直到这个版本明确地推出为止。在此期间,小的bug修复可以应用于这个分支(而不是开发分支)。但是大型新功能严禁在这里添加,如果有,它们必须被合并到develop中,并且要等到下一个重要的发布。

3.2.2 合并

release branches的状态准备好成为真正的发布版本时,需要执行以下操作。

  1. 首先,发布分支被合并到master中(因为根据定义,每个master上的提交都是一个新的发布版本);
  2. 接下来,必须在master上标记提交(tag),以便将来引用这个历史版本;
  3. 最后,在release branches上所做的更改需要被合并回develop branch中,以便将来的发布也包含这些错误修复。
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2

$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)

$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).

3.3 Hotfix branches

hotfix branches是为了修复特别紧急的生产版本Bug。当必须立即解决产品版本中的严重错误时,可以从标记产品版本的master branch的相应标记中分支一个hotfix branch

hotfix branches有一些特性:

  1. master branch创建;
  2. 完成后合并到developmaster分支;
    在这里插入图片描述

3.3.1 创建

master branch创建hotfix branches

$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)

$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)

3.3.2 合并

Bug修复完成之后要合并到develop branchmaster branch

$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1

$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)

$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).

注:release branches存在时,hotfix更改需要合并到该release branch中,而不是develop branch。当release branch分支完成时,再将该release branch合并到develop branch中。


4. 总结

以上内容总结如下图:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值