百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Git 分支设计规范

wptr33 2025-02-15 01:26 24 浏览


作者: 訢亮 来自:新亮笔记

概述

这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考。

规范是死的,人是活的,希望自己定的规范,不要被打脸。

在说 Git 分支规范之前,先说下在系统开发过程中常用的环境。


  • DEV 环境:用于开发者调试使用。
  • FAT 环境:功能验收测试环境,用于测试环境下的软件测试者测试使用。
  • UAT 环境:用户验收测试环境,用于生产环境下的软件测试者测试使用。
  • PRO 环境:就是生产环境。

比如,项目域名为:http://www.abc.com,那么相关环境的域名可这样配置:

  • DEV 环境:本地配置虚拟域名即可
  • FAT 环境:http://fat.abc.com
  • UAT 环境:http://uat.abc.com
  • PRO 环境:http://www.abc.com

接下来,针对不同的环境来设计分支。

分支


master 分支

master 为主分支,用于部署到正式环境(PRO),一般由 release 或 hotfix 分支合并,任何情况下不允许直接在 master 分支上修改代码。

release 分支

release 为预上线分支,用于部署到预上线环境(UAT),始终保持与 master 分支一致,一般由 develop 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。

如果在 release 分支测试出问题,需要回归验证 develop 分支看否存在此问题。

hotfix 分支

hotfix 为紧急修复分支,命名规则为 hotfix- 开头。

当线上出现紧急问题需要马上修复时,需要基于 release 或 master 分支创建 hotfix 分支,修复完成后,再合并到 release 或 develop 分支,一旦修复上线,便将其删除。

develop 分支

develop 为测试分支,用于部署到测试环境(FAT),始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度确定是由 feature 分支合并,还是直接在上面开发。

一定是满足测试的代码才能往上面合并或提交。

feature 分支

feature 为需求开发分支,命名规则为 feature- 开头,一旦该需求上线,便将其删除。

这么说可能有点不容易理解,接下来举几个开发场景。

开发场景

新需求加入

有一个订单管理的新需求需要开发,首先要创建一个 feature-order 分支,问题来了,该分支是基于哪个分支创建?

如果 存在 未测试完毕的需求,就基于 master 创建。

如果 不存在 未测试完毕的需求,就基于 develop 创建。

  1. 需求在 feature-order 分支开发完毕,准备提测时,要先确定 develop不存在未测试完毕的需求,这时研发人员才能将将代码合并到 develop(测试环境)供测试人员测试。
  2. 测试人员在 develop (测试环境) 测试通过后,研发人员再将代码发布到 release (预上线环境)供测试人员测试。
  3. 测试人员在 release (预上线环境)测试通过后,研发人员再将代码发布到 master (正式环境)供测试人员测试。
  4. 测试人员在 master (正式环境) 测试通过后,研发人员需要删除 feature-order 分支。

普通迭代

有一个订单管理的迭代需求,如果开发工时 < 1d,直接在 develop 开发,如果开发工时 > 1d,那就需要创建分支,在分支上开发。

开发后的提测上线流程 与 新需求加入的流程一致。

修复测试环境 Bug

在 develop 测试出现了Bug,如果修复工时 < 2h,直接在 develop 修复,如果修复工时 > 2h,需要在分支上修复。

修复后的提测上线流程 与 新需求加入的流程一致。

修改预上线环境 Bug

在 release 测试出现了Bug,首先要回归下 develop 分支是否同样存在这个问题。

如果存在,修复流程 与 修复测试环境 Bug流程一致。

如果不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。

修改正式环境 Bug

在 master 测试出现了Bug,首先要回归下 release 和 develop 分支是否同样存在这个问题。

如果存在,修复流程 与 修复测试环境 Bug流程一致。

如果不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。

紧急修复正式环境 Bug

需求在测试环节未测试出 Bug,上线运行一段时候后出现了 Bug,需要紧急修复的。

我个人理解紧急修复的意思是没时间验证测试环境了,但还是建议验证下预上线环境。

  • 如果 release 分支存在未测试完毕的需求,就基于 master 创建 hotfix-xxx 分支,修复完毕后发布到 master 验证,验证完毕后,将 master 代码合并到 release 和 develop 分支,同时删掉 hotfix-xxx分支。
  • 如果 release 分支不存在未测试完毕的需求,但 develop 分支存在未测试完毕的需求,就基于 release创建 hotfix-xxx 分支,修复完毕后发布到 release 验证,后面流程与上线流程一致,验证完毕后,将 master 代码合并到 develop 分支,同时删掉 hotfix-xxx 分支。
  • 如果 release 和 develop 分支都不存在未测试完毕的需求, 就直接在 develop 分支上修复完毕后,发布到 release 验证,后面流程与上线流程一致。

并行提测

在一个项目中并行开发了两个需求,并行提测,但是上线日期不同。

我能想到的两种方案:

  • 再部署一套可供测试人员测试的分支
  • 使用 git cherry-pick “挑拣”提交

对于并行提测,你有好的方案吗?欢迎留言。

Commit 日志规范

提交信息一定要认真填写!

建议参考规范:(scope):

比如:fix(首页模块):修复弹窗 JS Bug。

type 表示 动作类型,可分为:

  • fix:修复 xxx Bug
  • feat:新增 xxx 功能
  • test:调试 xxx 功能
  • style:变更 xxx 代码格式或注释
  • docs:变更 xxx 文档
  • refactor:重构 xxx 功能或方法

scope 表示 影响范围,可分为:模块、类库、方法等。

subject 表示 简短描述,最好不要超过 60 个字,如果有相关 Bug 的 Jira 号,建议在描述中加上。

小结

暂时就想到这么多,规范这东西不是一成不变的,供参考。


现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点下面链接可以跳转到教程。

https://www.captainbed.net/suga

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...