【Git原理与使用】多人协作与开发模型(2)
目录
一、多人协作
(一)多人协作一
1、情景
2、 origin/master
3、git branch
4、远程链接
5、总结
(二)多人协作二
1、引言
2、情景
3、流程
4、解决方法
二、企业级开发模型
1、DevOps背景
2、DevOps是什么
3、DevCps与git的关系
4、系统开发环境
5、Git分支设计规范
6、企业级项目管理一般流程
7、开发场景一基于gitflow模型的实战
一、多人协作
(一)多人协作一
1、情景
目标:master分支下file.txt文件新增代码“aaa”、“bbb”
实现:由开发者1新增“aaa”,由开发者2新增“bbb”
条件:在一个分支下协作完成
2、 origin/master
目前,我们的仓库中只有一个master主分支,但在实际的项目开发中在任何情况下其实都是不允许直接在master分支上修改代码的,这是为了保证主分支的稳定。所以在开发新功能时,常常会新建其他分支,供开发时进行迭代使用。
3、git branch
只能查看本地分支,要查看远程分支需要加上-r选项。但前提是要pull一下拉取最新的远程仓库,才能看到最新的内容
4、远程链接
切换到本地dev分支,将本地的dev与远程dev进行关系链接
//在切换到dev分支就与远程dev连接
git checkout -b dev origin/dev
//在创建本地dev后忘记连接远程dev可以使用
git branch --set-upstream -to=origin/der dev
5、总结
在同一分支下进行多人协作的工作模式通通常是:
①首先,可以试图用git push origin [branch-name]推送自己的修改
②如果推送失败,则因为远程分支比本地内容新,需要先用git pull试图合并
③如果合并冲突,则解决冲突,并在本地提交
④解决后,再用git push origin dev推送就能成功
⑤功能开发完毕,将分支git merge dev进master,最后删除分支
(二)多人协作二
1、引言
一般情况下,如果有需求需要多人同时进行开发,是不会在一个分支上进行多人开发,而是一个需 或一个功能点就要创建一个feature分支。
2、情景
目标:远程master分支下新增func1和func2文件
实现:由开发者1新增func1,由开发者2新增func2
条件:在不同分支下协作完成
3、流程
(1)开发者1
git branch
git checkout -b feature-1 #新增本地分支fecature-1并切换
vim func1 #新增需求内容
cat func1 #查看
git add func1 #添加到暂存区
git commit -m " add func1" #添加版本库
git push origin feature-1 #将feature-1分支推送到远端
(2)开发者2同理在 feature-2进行专业的开发了
(3)某天开发者2生病,需要你帮助他继续开发,这时你就需要切换到 feature-2分支帮忙开发了
git pull #必须先拉取远端仓库内容
git branch -a #可以看到远程已经有了feature-2
git checkout -b feature-2 origin/feature-2 #切换到 feature-2分支上,可以和远程的feature-2分支关联起来,否则将来只使用git push推送内容会失败
vim func2
cat func2
git add func2
ait commit -m "modify func2"
git push origin feature-2
(4)这时,你的小伙伴开发2修养好了,可以继续他自己的开发工作了,那么他首先要获取到你帮他开发的内容,接着继续开发。
git pull #失败了,并未pull下来开发/帮忙写的代码,是因为开发2没有指定本地feature-2分支与远程 origin/featnre-2分支的链接。
git branch--set-upstream -to=origin/freature-2 fenture-2
(5)各自开发完毕后,需要合并到master才算完成
(6)开发2开始merge.
git checkout master
git pull #保证本地masler是最新的内容.
git checkout feature-2 #切到 feature-2分支合并master
git merger master #无冲突就继续
git checkout master
git merge feature-2
git push origin master #将本地master推到远程
(7)开发者1同理,完成后featnre-1可直接在远程仓库删除
4、解决方法
远程分支删除后,本地git branch -a仍能看到的解决方法
git remote show origin #查看remote 地址远程分支,还有本地分支与之相对应关系等
git remote prune origin #删除远程仓库不存在的分支
二、企业级开发模型
1、DevOps背景
一个软件从0开始到最终交付,大概包括以下几个阶段:规划编码、构建、测试、发布、部署和维护软开 测 运维但在传统的IT组织下,开发团队(Dev)和运维团队(Ops)之间的诉求不同,双方利益冲突,不利于实现IT价值的最大化
开发团队:追求变化
运维团队:追求稳定
2、DevOps是什么
(1)为了保障开发和运维之间的鸿沟,需要在文化工具和实践方面的系统变革——DevOps就出现了
(2)Dev Ops(Development 和Operations的组合词”,是一种重视“软件开发人员(Dev)和”IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程、来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计划、编码、构建、测试、预发布、发布 维、监控、由此可见DevOps的强大
3、DevOps与git的关系
一个软件的迭代,在我们开发人员看来,说白了就是对代码进行迭代,那么就需要对代码进行管理。如何管理我们的代码呢,那不就是git(分布式版本控制系统)——所以git对于我们开发人员来说其重要性就不言而喻了。著名的gitee码云就是一种DevOps平台
4、系统开发环境
(1)开发环境:开发环境是程序员专门用于日常开发的服务器。为了开发调试方便,一般打开全部错误报告和测试工具是最基础的环境
(2)测试环境:一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上,该环境是开发环境到生产环境的过渡环境
(3)预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测而设立的一套环境。其配置等基本和生产环境一致,目的是能让我们发正式环境更有把握
(4)生产环境:是指正式提供对外服务的线上环境
5、Git分支设计规范
(1)
分支 | 名称 | 适用环境 |
master | 主分支 | 生产环境 |
release | 预发布分支 | 预发布/测试环境 |
develop | 开发分支 | 开发环境 |
feature | 需求开发分支 | 本地 |
hotfix | 紧急修复分支 | 本地 |
(2)master分支
①为主分支,为只读且唯一。用于部署到正式发布环境,一般由合并release分支得到 代码
②作为稳定的唯一代码库,不允许直接在master上修改
③master分支的推送应该打标签(tag)做记录,方便追溯
④ master分支不可删除
(3) release分支
①release为预发布分支,基于本次上线所有的feature分支合并到develop分支之后,基于develop分支创建。可以部署到测试或须发布集群。
②命名以release/开头建议的命名规则:release/version_publishtime
③主要用于提支给测试人员进行功能测试。发布提测阶段,会以release分支代码为基础进行提测
④如果在release分支测试出问题,需要回归验证develop分支看是否存在此问题
⑤releau属于临时分支,产品上线后可选删除
(4)develop分支
①develop为开发分支,基于master分支创建的只读且唯一分支始终保持最新完成以及bug修复后的代码。可部署到开发环境对应集群
②可根据需求大小程度确定是由feature分支合并,还是直接在上面开发(非常不建议)
(5)feature分支
①feature分支通常为新功能或新特性开发分支,以develop分支为基础创建feature分支
②命名以feature/开头,建议的命名规则:feature/user_createtime_feature.
③新特性或新功能开发完成后,开发人员需合到develop分支
④一旦该需求发布上线,便将其删除
(6)hotfix分支
①为线上bua修复分支或补丁分支,主要用于对线上的版本进行bug修复。当线上出现紧急问题need马上修复,需要基于masber分支创建hotfix分支
②命爷以hotfix/开头,建议的命名规则:hotfix/user_creatime_notfx③当问题修复完成后,need合并到master分支和develop分支并推送远程,一旦修复上线可删
以上跟大家分享的是企业级常用的一种git分支设计规范git flow模型。但是还是要说的是该模型并不适用于所有团队。最主要的还是需要站在团队以及项目的角度组看这个模型是否能简洁的解决问题
6、企业级项目管理一般流程
(1)准备工作
DevOps研发平台—gitee 企业版
(2)创建项目
(3)创建仓库
(4)添加成员
7、开发场景一基于gitflow模型的实战
(1)新需求加入
现有一个订单管理的新需求need开发,首先可以基于develop分支创建一个feature/xxxx_20241024分支
①需求在 分支开发完毕,这时研发人员可以将代码合并到develop分支,将其部署在开发环境的服务器中,方便开发人员进行测试和调试
a、开发者在feature分支下发起请求评审
b、审查员审查代码
C、审查通过,合并分支
d、合并成功、查看结果
②在develep下开发人员自测通过后,先确定下develop不存在
未测试完毕的需求,然后研发人员可基于develop分支创建一个release/xxx分支出来,可交由测试人员进行测试
③测试人员测试release通过后,就可将代码合并入master
④测试人员在master测试通过后,便可删除feature/xxx分支
(2)修复测试环境Bug
在develp测试出现了Bug,建议在feature分支上修复
(3)修复预发布环境Bug
在release测试出现了Bug,首先要回归develop分支是否同样存在问题
(4)修复正式环境Bug
在master测试出了问题,要回归release和develop
(5)紧急修复正式环境Bug
上线后出现Bug,紧急修复的。可基于master创建hotfix/xxxx分支,修复后发布到master验证完毕后,将master合并到develop,同时删掉hotfix/×xx分支
相关文章:
【Git原理与使用】多人协作与开发模型(2)
目录 一、多人协作 (一)多人协作一 1、情景 2、 origin/master 3、git branch 4、远程链接 5、总结 (二)多人协作二 1、引言 2、情景 3、流程 4、解决方法 二、企业级开发模型 1、DevOps背景 2、DevOps是什么 3、DevCps与git的关系 4、系统开发环境 5、Git分支设计规范 6、企业…...
Linux vi常用命令
参考资料 viコマンド(vimコマンド)リファレンス 目录 一. 保存系命令二. 删除系命令三. 移动系命令四. 复制粘贴系命令 一. 保存系命令 ⏹保存并退出 :wq⏹强制保存并退出 :wq!⏹退出(文件未编辑) :q⏹强制退出(忽略已编辑内容) :q!⏹另存为 :w 新…...

天地伟业设备主动注册协议接入SVMSPro接入
天地伟业主动注册协议接入SVMSPro平台 ** 图文手册: ** 步骤一:进天地伟业网页或者NVR界面进参数配置选项,左边选网络参数-注册中心,填写平台信息 账号/密码:设备的账号密码 服务器名称:任意 IP地址&#…...
C++日期类详解 第二级支线任务
日期类的整体 class Date { public:// 构造函数Date(int year 0, int month 1, int day 1);// 打印函数void Print() const;// 日期天数Date& operator(int day);// 日期天数Date operator(int day) const;// 日期-天数Date& operator-(int day);// 日期-天数Date …...
java--通用启动/停止shell脚本
脚本 #!/bin/bash# 定义超时时间(秒) timeout10# 检查命令参数 case "$1" instart|stop|restart|help)action"$1"jar_file"$2";;*)echo "Usage: $0 {start|stop|restart|help} [jar_file]"exit 1;; esac# 定义…...

Flutter-底部选择弹窗(showModalBottomSheet)
前言 现在有个需求,需要用底部弹窗来添加定时的重复。在这里使用原生的showModalBottomSheet来实现 showModalBottomSheet的Props 名称 描述 isScrollControlled全屏还是半屏isDismissible外部是否可以点击,false不可以点击,true可以点击&a…...

Linux——k8s认识
计算资源隔离 - 更方便进行高并发架构的维护和升级 - 架构管理的灵活性更高,不再以单个节点的物理资源作为基础 技术: - 硬件辅助虚拟化 - 容器技术 在企业部署方案中,很少以单节点实现虚拟化和容器技术,一般以集群状态来运…...

EC Shop安装指南 [ Apache PHP Mysql ]
这个是软件测试课上老师布置的一个作业,期间老师也出现了不少错误,所以还是有必要记录一下吧,凑一篇文章 主要是老师的文档以及自己的一些尝试记录,试错记录,解决方案等 主要介绍了Apache的安装,MySQL的安…...

无线感知会议系列【3】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-1】
前言: 2020年北京智源大会 张大庆老师的一个报告 参考链接: 基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用_哔哩哔哩_bilibili 目录: 无线感知简介 无线感知的核心 研究方向 Frsenel 模型 基于Fresnel 感知的应用举例…...

Virtuoso服务在centos中自动停止的原因分析及解决方案
目录 前言1. 问题背景2. 原因分析2.1 终端关闭导致信号12.2 nohup命令的局限性 3. 解决方案3.1 使用 screen 命令保持会话3.2 使用 tmux 作为替代方案3.3 使用系统服务(systemd) 4. 其他注意事项4.1 网络配置4.2 日志监控 结语 前言 在使用Virtuoso作为…...

泽众P-One性能测试平台火焰图帮助定位产品性能问题
在软件开发过程中,性能问题往往是最头疼的问题之一。随着软件系统的日益复杂,快速准确地定位并解决性能问题变得尤为重要。泽众P-One作为一站式性能测试平台,通过引入火焰图性能分析可视化工具,极大地提升了性能问题的定位效率和解…...

数据结构修炼——顺序表和链表的区别与联系
目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表(linear list)是n…...

AD9854 为什么输出波形幅度受限??
🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…...

在grafana上配置显示全部node资源信息概览
在grafana上配置显示全部node资源信息概览,便于巡检 1,注册grafana官网账号:Grafana dashboards | Grafana Labs 2、寻找可以展示所有node资源概览信息的dashboard,并下载支持prometheus数据源的dashboardÿ…...

MySQL —— 索引
索引的概念 MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过 ⼀定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。 MySQL索引类似于书籍的目录,通过指向数据行的位置&…...

(已解决)vscode如何选择python解释器
文章目录 前言解决方案 前言 有的时候可能有不同版本的编译器,以适用不同年份的项目。所以,怎么在vscode中换python解释器呢? 解决方案 对着要运行的python文件进行右键,比如我是要运行main文件,点击那个命令选项版…...
sql刷题常用函数
ROW_NUMBER() ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) 是一个窗口函数,用于生成每个分组内的唯一行号。这个函数非常适合在分组数据中进行排序,并为每一行分配一个序号。下面是对你的具体示例的详细解释: ROW_NUMBER() OVER (…...

Golang | Leetcode Golang题解之第417题太平洋大西洋水流问题
题目: 题解: type pair struct{ x, y int } var dirs []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func pacificAtlantic(heights [][]int) (ans [][]int) {m, n : len(heights), len(heights[0])pacific : make([][]bool, m)atlantic : make([][]bool, …...

Acwing Hash表
哈希表的作用:把一个比较大的空间,通过一个函数映射到一个比较小的空间 一般做哈希运算时,取一个质数作为模,会使得冲突的概率降低。 哈希表的冲突解决方法: 拉链法开放寻址法 下面详细介绍这两种方法的原理及其实现…...
大健康裂变分销小程序开发
大健康裂变分销小程序的开发是一个涉及技术、市场策略、用户体验和合规性等多个方面的综合项目。这类小程序旨在通过分销机制促进大健康产品的销售和品牌推广,同时利用社交网络的裂变效应扩大市场影响力。以下是大健康裂变分销小程序开发的主要步骤和考虑因素&#…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...