【Git】--- 企业级开发流程
Welcome to 9ilk's Code World

(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Git
本篇博客我们讲解Git在企业开发中的整体流程,理解Git在实际企业开发中的高效设计。
🏠 企业级开发流程
一个软件从零开始到最终交付,大概包括以下几个阶段 : 规划、编码、构建、测试、发布、部署
和维护。最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。
但随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升,一个人已经无法独立完成项目,于是开始出现了精细化分工。如下图所示 :

但我们知道一个公司中的开发团队(Dev)和运维团队(Ops)之间诉求不同:
- 开发团队追求变化
- 运维团队追求稳定
双方往往存在利益的冲突。比如,精益和敏捷的团队把持续交付作为目标,而运维团队则为了线上的稳定而强调变更控制。部门墙由此建立起来,这当然不利于IT价值的最大化。
为了弥合开发和运维之间的鸿沟,需要在文化、工具和实践方面的系系列变革- DevOps 正式登上舞台。DevOps (Development和Operations的组合词)是一种重视"软件开发人员(Dev)"和"IT运维技
术人员(Ops)"之间沟通合作的文化、运动或惯例。透过自动化"软件交付"和"架构变更"的流程,
来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计划、编码、构建、测试、预发布、发布、运维、监控,由此可见DevOps的强大。
从上面我们可以看出一个软件是需要不断迭代,不断调整更新迎合客户需求的。而对于开发人员来说,一个软件的迭代其实就是对代码进行迭代,那就需要对代码进行管理。而我们的Git这一个分布式版本控制系统正好能帮助我们进行版本跟踪管理,对开发人员的重要性不言而喻。
🏠 系统开发环境
Q:我们平时使用的APP,是开发人员开发完之后我们直接在上面使用吗?

对于用户来说 , 他们所在的环境需要是代码稳定,无bug来确保用户体验良好,开发者不能在该环境里做实验或者随意改动,否则会影响用户的正常使用。而开发者需要根据用户的需要对软件进行调整,开发人员需要一个独立环境来对软件进行自由实验,修复bug,添加新功能等。因此用户和开发人员需要进行环境隔离,等开发人员测试完才正式上线到用户线上发布环境,这也就能确保产品在上线前是稳定可靠的,同时也给予开发人员足够空间进行工作。
对于开发人员来说,在系统开发过程中最常用的几个环境必须要了解一下 :
1. 开发环境 : 开发环境是程序员们专门用于日常开发的服务器。为了开发调试方便,一般打开全部错误报告和测试工具,是最基础的环境。
2. 测试环境:一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。该环境是开发环境到生产环境的过渡环境。
3. 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测而设立的一套环境。其配置等基本和生产环境一致,目的是能让我们发正式环境时更有批把握!所以预发布环境是你的产品质量最后一道防线,因为下一步你的项目就要上线了。要注意预发布布环境服务器不在线上集成服务器范围之内,为单独的一些机器。
我们正式对外提供服务是在生产环境,生产环境要求代码稳定+环境配置正确,其中代码稳定测试是在开发和测试环境完成的,而预发布环境是帮助我们验证环境配置是否正确的。
4. 生产环境:是指正式提供对外服务的线上环境,例如我们目前在移动端或PC端能访问到的APP都是生产环境。
概括来说主要三个重要阶段 : 开发 -> 测试 ->上线

注意:对于规模比较大的公司来说,其实不止这几个环境,比如项目正式上线前还存在仿真/灰度环境,再比如还存在多套测试环境,以满足不同版本上线前测试的需要。
一个项目的开始从设计开始,而一个项目的成功则从测试开始。一套良好的测试体系可以将系统中绝大部分的致命bug解决在系统上线之前。测试系统的完善和成熟也是衡量一个软件企业整体水平的重要指标之一,测试往往被忽视,因为它对软件开发企业不产生直接的效益,但是它却是对软件质量的最终保障,乃至项目能否成功的重要因素。
🏠 Git分支设计模型
有了环境的概念后,那么对于开发人员来说,一般会针对不同的环境来设计分支,例如:

注意:以上表格中的分支和环境的搭配仅是常用的一种,可视情况而定不同的策略。
Master分支
- master为主分支,该分支为只读且唯一分支。用于部署到正式发布环境,一般由合并release分支得到。
- 主分支作为稳定的唯一代码库,任何情况下不允许直接在masteer分支上修改代码。
- 产品的功能全部实现后,最终在master分支对外发布,另外所有有在master分支的推送应该打标签(tag)做记录,方便追溯。
- master分支不可删除。
Release分支
- release为预发布分支,基于本次上线所有的feature分支合并到develop分支之后,基于develop
分支创建。可以部署到测试或预发布集群。 - 命名以release/开头,建议的命名规则:release/version_publishtime。
- release分支主要用于提交给测试人员进行功能测试。发布提测阶段,会以release分支代码为基准进行提测。
- 如果在release分支测试出问题,需要回归验证develop分支看否存在此问题。
- release分支属于临时分支,产品上线后可选删除。
Develop分支
- develop为开发分支,基于master分支创建的只读且唯一分支,始终保持最新完成以及bug修复后的代码。可部署到开发环境对应集群。
- 可根据需求大小程度确定是由feature分支合并,还是直接在上面开发(非常不建议)。
Feature分支
- feature分支通常为新功能或新特性开发分支,以develop分支为基础创建feature分支。
- 命名以feature/开头,建议的命名规则:feature/user_createtime_feature。
- 新特性或新功能开发完成后,开发人员需合到develop分支。
- 一旦该需求发布上线,便将其删除。
Hotfix分支
- hotfix分支为线上bug修复分支或叫补丁分支,主要用于对线上的版本进行bug修复。当线上出现紧急问题需要马上修复时,需要基于master分支创建hotfix分支。
- 命名以hotfix/开头,建议的命名规则:hotfix/user_createtime_hotfFix。
-
当问题修复完成后,需要合并到master分支和develop分支并推送远程。一旦修复上线,便将其删除。

以上其实就是企业级常用的一种Git分支设计规范:Git Flow模型。
注意:该模型不是适用于所有的团队,所有的环境和所有文化。如果你采用了持续交付,你会想使用一下能够尽可能简化交付过程的东西。有些人喜欢基于主干的开发模型,也有人喜欢使用特性标志。关键在于,这个分支模型能帮助你得团队或项目解决什么问题?会带来什么问题?这种模式为哪种开发提供更好的支持?你选择的分支模型最终都是为了让人们更容易的进行软件协作开发,因此分支模型需要考虑到使用者的需求,根据实际使用!对于不同公司,规范或许有些许差异,但本质都是追求效率和稳定。
🏠 企业级项目管理
准备工作
- DevOps研发平台 Gitee 企业版 - 企业级 DevOps 研发效能平台

注:对于多人协作开发,需要将多人账户拉入同一企业。
- 创建项目


- 新建仓库


- 添加成员
添加企业成员



添加项目成员


添加仓库开发人员


开发场景实操
增加新需求
假设现在有一个新需求需要进行开发,此时我们就可以基于develop分支新建feature分支:

由于我们在创建仓库时已经默认创建了feature分支,此时会创建失败。

此时我们只能删除仓库,重新建立仓库:

重新建立仓库时,我们需要选择生产/开发模型,此时才不会默认创建feature分支:

新建feature分支:

1) 需求在feature分支开发完毕,这时研发人员可以以将代码合并到develop分支,将其部署在开发环境的服务器中,方便开发人员进行测试和调试。


此时我们就能看到修改了

开发者在 feature 分支下发起请求评审:

审查员审查代码;审查通过,合并分支

合并成功查看结果:

2) 在 develop 下开发人员自测通过后,先确定下 develop 不存在未测试完毕的需求,然后研发人员可基于 develop 分支创建⼀个 release/xxx 分支出来,可交由测试人员进行测试。

3)测试人员测试 release 通过后(包含测试环境和预发布环境的测试),就可将代码合并入 master 。

同样也是进行审查合并:

4) 测试人员在 master(正式环境)测试通过后,便可删除 feature/xxx 分支

修复测试环境Bug
- 在develop测试出现了Bug,建议大家直接在 feature分支上进行修复。修复后的提测上线流程与新需求加入的流程一致。
修复预发布环境Bug
- 在release测试出现了Bug,首先要回归下develop分支是否同样存在这个问题。
- 如果存在,修复流程与修复测试环境Bug流程⼀致。
- 如果不存在,这种可能性⽐较少,⼤部分是数据兼容问题,环境配置问题等。
修复正式环境Bug
- 在master测试出现了Bug,⾸先要回归下release和develop分⽀是否同样存在这个问题。
- 如果存在,修复流程与修复测试环境Bug流程⼀致。
- 如果不存在,这种可能性也⽐较少,⼤部分是数据兼容问题,环境配置问题等。
紧急修复正式环境Bug
- 需求在测试环节未测试出Bug,上线运⾏⼀段时候后出现了Bug,需要紧急修复的。
- 有的企业面对紧急修复时,支持不进行测试环境的验证,但还是建议验证下预发布环境。
- 可基于master创建hotfix/xxx分支,修复完毕后发布到master验证,验证完毕后,将master代码合并到develop分支,同时删掉hotfix/xxx分支。
相关文章:
【Git】--- 企业级开发流程
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Git 本篇博客我们讲解Git在企业开发中的整体流程,理解Git在实际企业开发中的高效设计。 🏠 企业级开发流程 一个软件从零开始到最…...
SAP系统客户可回收包材库存管理
问题:客户可回收包材库存管理 现象:回收瓶无库存管理,在库数量以及在客户的库存数量没有统计,管理混乱。 解决方法: 客户可回收包装材料在SAP有标准的解决方案,在集团尚未启用该业务,首先…...
蓝桥杯嵌入式历年省赛客观题
一.第十五届客观题 第十四届省赛 十三届 十二届...
JDK的卸载与安装
卸载JDK 删除java的1安装目录 卸载JAVA_HOME 删除path下关于java的路径 java -version查看 安装JDK 百度搜索JDK,找到下载地址 同意协议 下载电脑对应版本 双击安装 记住安装路径 配置环境变量 我的电脑–>右键–>属性–>高级系统设置 环境变…...
八股系列(分布式与微服务)持续更新!
八股系列(分布式与微服务) 分布式系统的概念 分布式系统是由多个节点组成,节点之间通过网络协议传递数据,对外表现为一个统一的整体,一个节点可以是一台机器或一个进程;分布式系统的核心功能 资源共享&…...
【源码】Mybatis源码
引言 MyBatis 作为 Java 开发中广泛使用的持久层框架,其高效且灵活的数据库操作能力备受开发者青睐。在日常开发中,我们熟练运用 MyBatis 的各种功能来实现数据持久化,但深入探究其源码,能让我们更透彻地理解它的工作原理&#…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
LabVIEW驱动开发的解决思路
在科研项目中,常面临将其他语言开发的定制采集设备驱动转换为 LabVIEW 适用形式的难题。特别是当原驱动支持匮乏、开发人员技术支持不足时,如何抉择解决路径成为关键。以下提供具体解决思路,助力高效解决问题。 一、评估现有驱动死磕的可…...
[英语] abominable、detestable、despicable、odious、contemptible的区别
关于 abominable 与其他近义词的辨析 abominable 的核心含义是“因极端恶劣或违背道德而令人憎恶”,其情感强度较高,常带有道德批判意味。以下是其与常见近义词的区别及典型用法: 1. abominable vs. detestable abominable:强调…...
七、Qt框架编写的多线程应用程序
一、大纲 学习内容:使用两个线程,分别点击两个按钮,触发两个不同的效果 所需控件:两个button、三个label 涉及知识点:多线程、Qt的connect机制、定时器、互斥锁 需求: 1,多线程定时计数&#x…...
MATLAB求和∑怎么用?
MATLAB求和∑怎么用? 一:题目:求下列方程的和 二、代码如下 1.syms函数 (方法一) 代码如下(示例): 1. syms x 2. symsum((x.^22*x).^3,1,100) 3. 2.直接用循环 (方法二) 代码如下&am…...
项目二 使用miniedit创建拓扑
一、项目需求分析: 1. 在ubuntu的桌面环境中运行Mininet的图形化界面2. Mininet图形化界面中搭建拓扑并设置相关的设备和链路属性3. Floodlight中查看拓扑4. 完成Mininet的测试 二、项目实施步骤 1. 运行Mininet图形化界面 在“~/mininet/examples”目录下有一m…...
Docker 镜像 的常用命令介绍
拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时,拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…...
0x02.Redis 集群的实现原理是什么?
回答重点 Redis 集群(Redis cluster)是通过多个 Redis 实例组成的,每个主节点实例负责存储部分的数据,并且可以有一个或多个从节点作为备份。 具体是采用哈希槽(Hash Slot)机制来分配数据,将整…...
浏览器多开
使用浏览器的用户功能,创建多个用户即可完成浏览器多开的需求,插件等相对独立 需要命名 然后就可以通过多个用户切换来实现多开了,不同任务选择不同用户...
Python中NumPy的逻辑和比较
在数据科学和科学计算领域,NumPy是一个不可或缺的Python库。它提供了高效的多维数组对象以及丰富的数组操作函数,其中逻辑和比较操作是NumPy的核心功能之一。通过灵活运用这些操作,我们可以轻松实现数据筛选、条件判断和复杂的数据处理任务。…...
20250412_代码笔记_CVRProblemDef
文章目录 前言一、get_random_problems 函数分析二、augment_xy_data_by_8_fold 函数分析代码 前言 该笔记分析代码的功能是生成随机VRP问题的数据,包含仓库坐标、节点坐标和节点需求。 对该代码进行改进 20250412-代码改进-拟蒙特卡洛 一、get_random_problems 函…...
机器学习(3)——决策树
文章目录 1. 决策树基本原理1.1. 什么是决策树?1.2. 决策树的基本构成:1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益(ID3)2.1.2. 基尼不纯度(CART)2.1.3. 均方误差(MSE&…...
Redis常用数据结构和应用场景
一、前言 Redis提供了多种数据结构,每种结构对应不同的应用场景。本文对部分常用的核心数据结构和典型使用场景作出介绍。 二、String(字符串) 特点:二进制安全,可存储文本、数字、序列化对象等。场景: 缓…...
【转载翻译】使用Open3D和Python进行点云处理
转自个人博客:【转载翻译】使用Open3D和Python进行点云处理 转载自:Point Cloud Processing with Open3D and Python 本文由 Carlos Melo 发布于2024年2月12日 本文很适合初学者对三维处理、点云处理以及Open3D库进行初步了解 另外,本文是基于…...
用户登录不上linux服务器
一般出现这种问题,重新用root用户修改lsy用户的密码即可登录,但是当修改了还是登录不了的时候,去修改一个文件用root才能修改, 然后在最后添加上改用户的名字,例如 原本是只有user的,现在我加上了lsy了&a…...
SQL 全文检索原理
全文检索(Full-Text Search)是SQL中用于高效搜索文本数据的技术,与传统的LIKE操作或简单字符串比较相比,它能提供更强大、更灵活的文本搜索能力。 基本概念 全文检索的核心思想是将文本内容分解为可索引的单元(通常是词或词组),然后建立倒排…...
dcsdsds
我将为您在页面顶部添加欢迎内容,同时保持整体风格的一致性。以下是修改后的代码,主要修改了模板部分和对应的样式: vue 复制 <template><div class"main-wrapper"><!-- 新增欢迎部分 --><div class"…...
FISCO BCOS区块链Postman接口测试:高级应用与实战技巧 [特殊字符]
引言:为什么Postman是FISCO BCOS测试的利器? 在区块链开发领域,接口测试是确保系统稳定性和安全性的关键环节。作为国产领先的联盟链平台,FISCO BCOS在金融、政务、供应链等多个领域得到广泛应用。而Postman作为一款功能强大的API测试工具,凭借其直观的图形界面和丰富的测…...
KWDB创作者计划—KWDB场景化创新实践:多模态数据融合与边缘智能的突破性应用
引言:AIoT时代的数据库范式重构 在工业物联网设备数量突破千亿、边缘计算节点覆盖率达75%的2025年,传统数据库面临多模态数据处理效率低下、边缘端算力利用率不足、跨域数据协同困难等核心挑战。KWDB(KaiwuDB Community Edition)通…...
风暴之眼:在AI重构的数字世界重绘职业坐标系
硅谷的某个深夜,GitHub Copilot在程序员的注视下自动生成出完美代码,这个场景正在全球数百万开发者的屏幕上同步上演。当AI生成的代码通过图灵测试,当机器学习模型开始理解业务需求,一个根本性命题浮出水面:在人类亲手…...
主机协议端口安全
FTP RDP SSH Rsync 渗透基础 | 黑客常用端口利用总结 - ZM思 - 博客园 (cnblogs.com)...
matplotlib数据展示
目录 一、绘制直方图 1、简单直方图 2、绘制横向直方图 3、绘制堆叠直方图 4、对比直方图 二、折线图与散点图 三、绘制饼图 四、雷达图 1、简单雷达图 2、多层雷达图 五、总和 在前面的学习中,我们能够使用一些库进行数据的整合,收集&#x…...
MySQL 面经
1、什么是 MySQL? MySQL 是一个开源的关系型数据库,现在隶属于 Oracle 公司。是我们国内使用频率最高的一种数据库,我本地安装的是比较新的 8.0 版本。 1.1 怎么删除/创建一张表? 可以使用 DROP TABLE 来删除表,使用…...
vLLM实战:多机多卡大模型分布式推理部署全流程指南
1. 环境准备与基础配置 1.1 系统要求 依赖组件: # 基础工具安装 sudo apt-get install -y lsof git-lfs nvidia-cuda-toolkit1.2 虚拟环境配置 使用conda创建隔离环境,避免依赖冲突: conda create -n vllm python3.10 -y conda activate…...
