git管理历险记

2024-09-05 10:36
文章标签 管理 git 历险记

本文主要是介绍git管理历险记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇文章主要是记录一下公司内git管理策略的变更,又如何因地制宜的磨合出适合团队的方法论,以便未来的职业生涯遇到类似的问题可以稍微触类旁通下。

传统git策略

dev -> test -> pre -> main

这也是比较经典的一个环境对应一个分支,许多没有并行开发需求的公司都会使用这个。

但是开始并行开发多个需求就遇到了问题:

所有代码都在环境分支上开发,可能导致dev、test分支修改过多堆积,真要上pre或生产时总要花费很多精力去整理或解决冲突。

并且,如果原本说好一起上的多个需求,有某个需要先上则会需要再单独切分支处理,测试的时候环境也需要单独切到这个分支使用,非常麻烦。

解决方案:

  1. 每个功能都有单独的分支
  2. 在test可以替换为feature-join分支 *
  3. 收回随意修改部署环境分支的权限

*: feature-join为集成测试分支,用于多个需求同时测试但是不同时上线的情况。

最终流程为:

基于main签出新的功能分支 -> test/feature-join -> pre -> main

更适应变化的策略

经过调整冲突比之前少了,但是只是少了dev的部分冲突,在test和pre上还是会存在分支环境不同导致的合并问题。正好公司在推行敏捷开发,以迭代形式上新功能及修复,正好以另一种方式改动策略。

如下图:
在这里插入图片描述

前提:目前我司只有两个环境供使用、实行敏捷开发有极多并行开发的合并操作、有许多提前上线需求、需求不清晰

基于这些前提,我们能确定是一定要能够尽可能不影响单独功能上线以及解决并行开发冲突

先来解释下图中各个步骤:

第一,也是最核心的一点,从main签出一条publishable分支,使用这个分支当防腐层的作用,只有确定上线的需求才会合到这个分支。

第二,从刚签出的publishable分支签出一条迭代分支,在敏捷开发的一个版本迭代功能需求,全部都会合到这个分支里。

第三,从刚签出的迭代分支,签出自己开发的功能分支,功能分支开发完成后合到迭代分支上面一起上环境测。

如果有紧急的生产bug需要处理,则是从publishable拉hotfix新分支修改,然后hotfix合到预生产测试。

如果要上生产,则是先将对应分支先合到pubulishable,再确认,然后publishable再合到main。

其实跟dev-pre-main-release这种有共通之处,只不过充当防腐层的分支换了个名字,毕竟在分支管理的策略上其实来来回回也就那么几个操作。但是还有种上家使用的分支策略可以推荐给大家

较严谨的策略

这种策略就是维护一个长期分支 release,流程大概为:

从release拉出新分支,基于上一个已打出的版本,判断更新重要性增加版本,如:2.0.1 -> 2.0.2/2.1.0 等,使用三段式版本,大家都在这个版本分支上开发。

测试预生产和生产也都使用版本分支上环境,上生产时会合一份进release。

因为这种策略基本只是用一个分支,所以对于团队对每个迭代的工作量把控要求很高、不能有很多需求变化,但也最大程度避免了合并的问题,即使有冲突也会第一时间解决,合并出了问题每次上环境都会极快暴露并修复。

总结

那么可以稍微比较一下:

如果团队较小,项目不大,那么直接传统策略就好了,一般也碰不上冲突。就开发工期长变化大的时候开分支都行。

如果团队较大,对于项目开发的需求不明确,时常有部分需求先上或不上的情况,那么就用适应变化的敏捷策略。

如果对项目开发需求很清晰,工期也把控的准,对外交付可以版本迭代的形式,那么更推荐严谨的敏捷策略。

这篇关于git管理历险记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象