【git分支管理策略】如何高效的管理好代码版本

2024-03-26 21:36

本文主要是介绍【git分支管理策略】如何高效的管理好代码版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.分支管理策略

2.我用的分支管理策略

3.一些常见问题


1.分支管理策略

分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法,让分支之间能科学合理、高效的进行协作,帮助我们在整个开发流程中合理的管理好代码版本。

目前有两套Git分支管理策略GitHub Flow和GitFlow,它们各自定义了一套规范,帮助开发者更好地组织和管理源代码的版本控制流程。

GitHub Flow

简介:

GitHub Flow 是由GitHub团队推广的一种简单、灵活且快速的工作流程,特别适合小型团队和持续交付环境。

核心概念:

  • 所有开发都是基于main分支(原称master,现在推荐使用main)。

  • 新的功能开发通过创建短期的特性分支(feature branches)。

  • 特性分支完成后,通过Pull Request (PR) 提交到main分支。

  • PR期间进行讨论、审查和自动化测试,只有当所有工作满足要求时,才将其合并至main。

优点:

GitHub Flow的优势是快速迭代,频繁部署,强调每个特性分支都应具备随时可部署的状态。

GitFlow

简介:

GitFlow 是一种更为严谨和复杂的分支模型,适用于大型项目和需要严格版本控制的企业级开发环境。

核心概念:

  • 分支分为两大类:持久分支和临时分支。

    • 持久分支包括:main(稳定版)、develop(开发版)。

    • 临时分支包括:feature(特性分支)、release(发布分支)、hotfix(热修复分支)。

  • develop分支作为日常开发集成的分支,每次新增功能或修复都在独立的feature分支上完成,完成后合并回develop。

  • 当产品即将发布时,创建一个release分支,进行测试和最后的调整,确认无误后合并到main和develop,并打上版本标签。

  • 如果生产环境中发现了紧急问题,那么在main基础上创建hotfix分支进行修复,修复完毕后同样合并回main和develop。

优势:

结构清晰,易于跟踪每个阶段的代码状态,有利于多人协同和大型项目管理,尤其对于那些有明确版本周期和稳定版需求的项目。 总结来说,GitHub Flow 更注重敏捷开发和快速迭代,简化了分支结构;而 GitFlow 则提供了详细的分支管理方案,更适合需要精细化版本管理和长周期开发的场景。目前市面上各团队常用的管理策略基本上都是基于GitHub Flow策略的。

2.我用的分支管理策略

目前作者所在的团队采用的分支管理策略就是基于GitHub Flow策略的。

我们有以下几个分支:

  • master,稳定主分支

  • pre-release,稳定测试分支

  • develop,开发分支

  • feature,单人新特性分支

  • release,发布分支

  • patch,维护分支

当我们开发新功能的时候会先分一下任务,然后各自从develop分支上拉一个属于自己的feature分支,这个feature一般会命名为:下个版本的版本号-feature-自己名字的缩写

任务有轻重缓急和难易之分,一个大版本的所有新需求很难在统一的一个时间点上完成,所以一般都是分批次提测的,最后合并在一起发版。提测的时候各自将自己要提测的内容从自己的feature上合并到develop分支上,再从develop分支合并到pre-release上。将pre-release部署到测试环境中用于测试。之所以这样做是在实践中发现很多时候develop并不是稳定的,大家都在往上面合并代码,直接将develop用于部署测试往往无法保证测试环境的稳定,会造成阻塞。所以有一个pre-release用来保证测试环境的稳定。测试期间的bug修复也是先修自己的feature然后合并到develop然后合并到pre-release。

要注意上面的合并一般指的都是cherry pick,一条一条的合并,分支级别的merge是很容易将pre-release和develop合乱的。

所有新特性都测试完成后,将develop合并到release上,然后基于release打tag发版。

发版后有可能还会发现一些bug,一般会基于发版的tag拉一个patch分支来进行快速修复。这时候修复的bug会先在patch上修复,修复完毕后合并到develop分支上。最后这个patch分支在维护一段时间后会被丢弃。

3.一些常见问题

1.如何打tag?

在IDEA种可以通过图形化的界面来打tag:

也可以通过命令来打tag:

git tag -a <tag-name> -m "<tag-message>"

打完tag之后push到远端仓库即可。

2.如何切到某个tag

打完tag之后有些时候我们要用到打tag的代码版本,可以通过命令跳过去:

git checkout -b <new-branch-name> <tag-name>

3.如何基于tag拉分支?

打完tag代码就算是封板了,但是发版后仍然会有一些小问题会持续暴露出来,需要我们持续修复,于是我们需要基于tag拉出一个hotfix分支来,在这个分支上进行发版后的bug修复,可以通过命令来从某个tag拉出一个分支:

git checkout -b <new-branch-name> <tag-name>

3.如何合并?

在hotfix上修复的bug在当前的开发分支上当然也是存在的,所以我们要将hotfix上的bug修复持续的合并到开发分支上,这时候尽量不要用分支级别的合并命令merge来操作,尽量将bugfix一条一条的合并到开发分支上。

在IDEA上可以直接通过图形化界面将某个分支上的修改单条的合并到当前分支。操作很简单,首先保证自己当前在接收合并的分支上,然后在git log中找到要合并过来的提交,cherry pick过来即可:

4.如何比对分支之间的区别?

从hotfix合并到develop分支,这种两个分支之间一条一条的合并难免会合并漏,最好的方式当然是要比对出两个分支之间的差异,在IDEA中很好比对差异:

这篇关于【git分支管理策略】如何高效的管理好代码版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849919

相关文章

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地