文档章节

实战 Git 分支策略

PageThinker
 PageThinker
发布于 02/16 21:54
字数 1383
阅读 4.4K
收藏 8

项目上总有那么多不尽人意的地方,导致各方面出现问题。分支管理策略就是其中一个经常遇到的问题。例如:

(1) 主干开发,发现代码质量不强,导致代码提交后阻塞,等待修复问题。

(2)QA 进入了在 Dev 环境对应 Master 分支,由于 Dev 环境一直在合并代码,QA不得不停下来,因为服务有一段时间可能持续在部署。

上述问题就会让我们思考应该如何让我们的分支管理对团队更加有效。

在常见的分支策略上,有的分支策略是指看上去挺有帮助,但是实际操作过程中并不利于团队提升效率和改进。

常见的三种分支策略:Git Flow、Github Flow、TBD。对于三种常用的分支策略,可以按照下面的思路进行选择。

1, Git Flow

Git Flow 并不是Git上的最佳实践。 虽然 Git Flow 是基于 Git 功能构建的软件开发工作流。

Git Flow 模型是什么?

Git Flow 让开发过程基于不同的分支。

Master Branch: Master 分支上的代码可以随时部署到 Master 上。

Feature Branch: 每个特性在一个单独的 Feature 分支上进行开发,开发完成后 merge 到 develop branch 上进行集成。

Develop Branch: 用来集成的分支,当功能达到稳定后,可以 merge 到 master 分支

Release Branch: 为每次发布准备 realse 版本,在这个分支上,只进行Bug Fix,并在完成后 merge 回到 master 和 develop 分支。

Hotfix Branch: 用于快速修复,在修复完成后merge 到 master 和 develop 分支上。

通过这些分支 Git Flow 制定了一套开发、集成、部署的流程。看上去很好,不同的分支担任不同的责任。但是时间中它的不好确实超过的它的好。

那么它的问题在哪里呢?

(1)开发一个新的 Feature 就需要创建一个新的 Branch;

(2)当看文字是觉得它简单,但是离开文字之后,很多开发者并不清楚哪个环节应该怎么操作;

(3)Feature 分支阻碍了Merge,Merge 代码总是很痛苦的,因为很容易出错,而且较大的一次 Merge 成本会非常高;

(4)Feature 需要开发完成后才能 merge 到 develop 分支,无法做到持续集成。

IDE 做了很多改进帮助 Dev 降低 Merge 成本。但是对于业务逻辑上的 Merge IDE 是无法帮助 Dev 完成的。

在软件的世界里,如果一件事很痛苦,我们就频繁的去做它。比如集成很痛苦,我们就持续集成。Merge 很痛苦我们就频繁的 Merge。

显然 Git Flow 这种分支策略没有办法让我们频繁的 merge。


2, Trunk-based Development ( TBD )

采用 TBD 模式开发的时候主要有两个分支:

Master Branch:所有 Dev 在 Master 分支上进行开发。

Release Branch:Release 分支,当一个解决过去,从 Master 分支拉出 Release 分支。

我们需要的只是多个环境:DEV、SIT、UAT、PROD。团队代码质量高,可以可以直接使用上面四个环境,如果团队代码质量不高,可以为 QA 准备一个 Test 环境。

(1)如果遇到需要创建 Release 但是功能尚未开发完成怎么办?

使用 Feature Toggle 功能,控制开边的避开闭,当然使用 Feature Toggle 也是有成本的,除了添加 Toggle,还需要维护这些 Toggle。

(2)当发现 BUG 怎么办?

当 Release 分支发现 Bug 的时候,可以直接在 Release 分支上进行修改,修改完成后 merge 回到 master;也可以在 master 分支上进行修改,修改完成后 cherry-pick 到 Release 分支。

(3)当 DEV 环境不稳定怎么办?

临时做法就是创建一个 Test 环境,可以选择定期自动部署到 Test 环境,也可 QA 根据需要手动更新 Test 环境。

根本做法是提升工程质量。在项目管理时间上 和 项目技术时间上需要同时改进。可以通过 Check Style + PMD + Jacoco 在 Dev 本地就运行测试,测试通过后才可push(PS:使用git hook来限制一下)。同时团队可以选择使用 Arch Unit 来守护架构。

当然上面技术的改进的前提是团队需要些测试,否则持续集成 只能叫做 "人肉持续集成"。


3, Github Flow

Github Flow 是一个成本较高的分支策略。

Github Flow 需要对每一个分支创建一个运行环境,来验证分支的正确性,这就需要 Ops 提供相应的环境才可以。但是它未解决 merge 时的验证提供了保证。

对 Github Flow 感兴趣的可以移步到这里:《Github-Flow》。不过我不认为它是真正敏捷的工作流,因为它是建立在一定条件基础上的。

所以如果你的团队是个小型团队,可以绕过了,如果是个大型团队,团队能力又好,说不定这个 Github Flow 会适合你。

© 著作权归作者所有

PageThinker
粉丝 5
博文 54
码字总数 32891
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(0)

05 分支管理 —— 分支管理策略

05 分支管理 —— 分支管理策略 分支管理策略 通常合并分支时,可能Git会用模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用模式,Git就会在merge时生成一个新的commit,这...

lwenhao
2019/02/21
16
0
初创公司应该如何做好持续集成和部署?

持续集成和部署是每一个互联网开发团队都必须要面对的问题,特别是在初创公司,由于业务和技术团队快速增长,技术积累较弱的,所以一个高效的,可持续的运维规范尤为重要。 最近一段时间一直...

90xa
2016/03/19
196
0
devops| git hooks 实战: 防分支 merge

date: 2018-5-7 11:34:54 title: devops| git hooks 实战: 防分支 merge description: 基于工作中 git 工作流遇到的问题, 实战 git hooks, 防止测试分支合并到开发分支 先推荐一本书, Pro G...

daydaygo
2018/05/07
0
0
Git自学成才——git merge

概念 git merge 和 git rebase 是使用率非常高的两条指令 本文对git merge的日常使用场景做一个梳理,git rebase请看 Git自学成才——rebase完整版 假设我有一个开发分支dev,有一个主干分支...

wIsper
2018/06/19
0
0
iKcamp出品微信小程序教学共5章16小节汇总(含视频)

🇨🇳 微信小程序课程,面向所有具备前端基础知识的同学 🇨🇳 阅读要求 读者需要具备但不限于以下技能 HTML JavaScript CSS 一共四部分十五小节,适合七天的训练营。 从现在开始,我假...

iKcamp
2017/11/06
54
0

没有更多内容

加载失败,请刷新页面

加载更多

超实用企业级搜索引擎_Elasticsearch(二)基于RESTFul Api操作

Elasticsearch(二)基于RESTFul Api操作 想要进行API操作,必须安装好Elasticsearch,如果没安装的,可以参考上篇去操作一波,再来学习API操作噢! Elasticsearch的 API,我们可以不用每个API语法啥...

煌sir
29分钟前
31
0
版本控制git的简单使用

0.第一次使用时配置: git config --global user.name "your_name" git config --global user.email "your_name@domain.com" 用的最多的: (查看当前git状态) git status 1.初始化: ......

baowang123
44分钟前
16
0
定时器Timer和TimerTask

为什么要使用定时器呢? 比如说一个web应用,如果这个应用规模很大,那它的日志数据是不是很多。如果一直存下来服务器的存储量怕是不行吧,需要隔一段时间删除,那么就需要一个线程每隔一段时...

南柯好萌
今天
18
0
深圳创服机构创成汇投融资对接指南

深圳创服机构创成汇投融资对接指南 一线城市一直是许多创业者创业热土,深圳也不例外,作为发达城市,科技是深圳的标志,也是许多科技创业者向往之地,科技创业者在创业前期面临许多难题,其...

cchlin
今天
35
0
egg学习笔记第六天:使用中间件屏蔽可疑用户

站点有时候想屏蔽一些特定频繁抓取服务器数据的用户,可以放在中间件中去做,用户在指定Ip数组内,则屏蔽,如果不在,则匹配路由规则执行controller。 中间件的概念: 匹配路由前,匹配路由完...

一生懸命吧
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部