Git的多人协作模式与企业级开发模型

news2024/11/27 18:45:50

目录

多人协作一

1.要完成的任务

2.准备操作 

3.用户的开发操作 

4.merge操作

多人协作二 

1.要完成的任务

2.用户的开发操作 

3.merge操作 

4.解决远程分⽀删除后,本地git branch -a 依然能看到的问题

企业级开发模型 

1.了解一些常识

2.系统开发环境

3.Git分⽀设计规范

多人协作一

1.要完成的任务

目标:在master分支下的file.txt文件中新增"aaa" 和 "bbb"

实现:由开发者1新增"aaa",开发者二新增"bbb"

条件:在同一个分支下协作完成

2.准备操作 

在这里我们在Linux中模拟用户1开发,在windows中模拟用户2开发,分别将远端仓库进行git clone操作进行准备操作,对于Linux中的操作在前面已经介绍了,这里重点介绍用户2的开发环境

在windows中选择一个目录,右击鼠标

再执行 git clone命令 

这样在目录中就会将远程仓库克隆到当前目录,在这个目录用终端中打开来模拟用户2的开发操作

 但在实际开发中,每个⽤⼾都有⾃⼰的gitee/github账号,如果要多⼈进⾏协同开发,必须要将⽤⼾添加进开发者,⽤⼾才有权限进⾏代码提交:

 此时我们的仓库是只有一个master分支的,在实际开发中为了维护master分支的稳定性,是不能直接对master分支进行操作的,因此我们还需要新建一个分支来供我们的开发需求

 创建成功的远程分⽀是可以通过Git拉取到本地来,以实现完成本地开发⼯作

3.用户的开发操作 

用户1的开发操作

用户2的开发操作

当进行push操作时,会发现有报错,这是因为用户1和用户2的两次提交都是在file.txt文件中进行的,对这一个文件进行两次提交的话,此时就会发生冲突,git拒绝了推送操作,解决办法就是先⽤ git pull 把最新的提交从 origin/dev 抓下来,然后,在本地进⾏合并,并解决冲突,再推送

整个过程的简图分析 

4.merge操作

对于merge操作是有两种的,一种是通过填写Pull Requests 合并申请单的方式来合并

这种方式是要通过审核员审核的,具有保证性的 

第二种就是在本地通过命令的方式来进行合并

具体操作为:

最后删除dev分支

在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:
• ⾸先,可以试图⽤git push origin branch-name推送⾃⼰的修改;
• 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤ git pull试图合并;
• 如果合并有冲突,则解决冲突,并在本地提交;
• 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
• 功能开发完毕,将分⽀ merge 进 master,最后删除分⽀ 

多人协作二 

1.要完成的任务

目标:远程master分支下新增function1和function 2文件

实现:有开发者1新增function 1文件,开发者2新增function 2文件

条件:在不同分支下协作完成,让某一个功能各自私有一个分支

2.用户的开发操作 

用户1的开发操作

用户2的开发操作

 但此时在用户2开发的过程中因一些原因不能继续完成开发的,将开发内容交给你,让你去帮助完成开发于是他便把feature-2分⽀名告诉你了。这时你就需要在⾃⼰的机器上切换到 feature-2 分⽀帮忙继续开发,要做的操作有:

这里说明下直接使用git pull 操作的注意事项 

1.若直接拉取的是某个分支下文件的内容,必须和远程建立链接

2.若直接拉取的是仓库的内容,在git clone时就已经建立好链接了,直接使用就行

3.建立链接的操作(Linux):  git checkout -b [新建分支名]  [远端已经存在的分支] 

如:   git checkout -b dev origin/dev

4.建立链接操作(Windows): git branch --set-upstream-to=origin/分支名   新建分支名

如:git branch --set-upstream-to=origin/dev   dev

如果用户2回来后想接手,继续完成开发的话,需要的操作

3.merge操作 

让master分支合并feature-1分支和feature-2分支

对于这里用户2开发完成的feature-2分支可以使用填写Pull Requests申请单的方式进行合并,上面的merge操作时已经介绍过了

对于用户1开发完成的feature-1分支如果直接合并到master分支的话,可能会发生冲突,影响master分支的稳定,因此可以在本地先让feature-1分支合并master分支,再push到远端仓库,用Pull Requests的方式让master分支合并feature-1分支,也可以在feature-1分支合并master分支后,切换到master分支,合并feature-1分支,再进行push操作,最后删除两个分支

用户1所要做的操作

 一些注意:

1、由于feature-1分⽀已经merge进来了新内容,为了保证远程分⽀最新,所以最好push⼀下。
2、要 push 的另⼀个原因是因为在实际的开发中,master的merge操作⼀般不是由我们⾃⼰在本      地进其他⼈员或某些平台merge时,操作的肯定是远程分⽀,所以就要保证远程分⽀的最新。

3、如果 merge 出现冲突,不要忘记需要commit才可以push!! 

4.解决远程分⽀删除后,本地git branch -a 依然能看到的问题

 使用git remote prune origin 后,再查看分支的话,就查看不到了,最后在在本地删除本地分支

企业级开发模型 

1.了解一些常识

⼀个软件从零开始到最终交付,⼤概包括以下⼏个阶段:规划、编码、构建、测试、发
布、部署和维护。
最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完成所有阶段的⼯作。但随着软件产业的⽇益发展壮⼤,软件的规模也在逐渐变得庞⼤。软件的复杂度不断攀升,⼀个⼈已经hold不住了,就开始出现了精细化分⼯。如下图所⽰:

但在传统的?IT?组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同:
• 开发团队(尤其是敏捷团队)追求变化
• 运维团队追求稳定
双⽅往往存在利益的冲突。⽐如,精益和敏捷的团队把持续交付作为⽬标,⽽运维团队则为了线上的稳定⽽强调变更控制。部⻔墙由此建⽴起来,这当然不利于IT价值的最⼤化。为了弥合开发和运维之间的鸿沟,需要在⽂化、⼯具和实践⽅⾯的系列变⾰⸺DevOps正式登上舞台。 

DevOps(Development和Operations的组合词)是⼀种重视“软件开发⼈员(Dev)”和“IT运维技
术⼈员(Ops)”之间沟通合作的⽂化、运动或惯例。透过⾃动化“软件交付”和“架构变更”的流
程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计划、编码、构建、测试、预发布、发布、运维、监控,由此可⻅DevOps的强⼤。
讲了这么多,这个到底和Git有什么关系呢
举⼀个很简单的例⼦就能说明这个问题。⼀个软件的迭代,在我们开发⼈员看来,说⽩了就是对代码进⾏迭代,那么就需要对代码进⾏管理。如何管理我们的代码呢,那不就是Git(分布式版本控制系统)!所以Git对于我们开发⼈员来说其重要性就不⾔⽽喻了

2.系统开发环境

对于开发⼈员来说,在系统开发过程中最常⽤的⼏个环境必须要了解⼀下:

1. 开发环境:开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便,⼀般打开全部错误报告和测试⼯具,是最基础的环境。
2. 测试环境:⼀个程序在测试环境⼯作不正常,那么肯定不能把它发布到⽣产机上。该环境是开发环境到⽣产环境的过渡环境。
3. 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。其配置等基本和⽣产环境⼀致,⽬的是能让我们发正式环境时更有把握!所以预发布环境是你的产品质量最后⼀道防线,因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服务器范围之内,为单独的⼀些机器。
4. ⽣产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是⽣产环境。

这⼏个环境也可以说是系统开发的三个重要阶段:开发->测试->上线

对于规模稍微⼤点的公司来说,可不⽌这么⼏个环境,⽐如项⽬正式上线前还存在仿真/灰度环境,再⽐如还存在多套测试环境,以满⾜不同版本上线前测试的需要

3.Git分⽀设计规范

环境有了概念后,那么对于开发⼈员来说,⼀般会针对不同的环境来设计分⽀

master分⽀
• master 为主分⽀,该分⽀为只读且唯⼀分⽀。⽤于部署到正式发布环境,⼀般由合并
release 分⽀得到。
• 主分⽀作为稳定的唯⼀代码库,任何情况下不允许直接在master分⽀上修改代码。
• 产品的功能全部实现后,最终在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 分⽀为线上bug修复分⽀或叫补丁分⽀,主要⽤于对线上的版本进⾏bug修复。当线上
出现紧急问题需要⻢上修复时,需要基于 master 分⽀创建 hotfix 分⽀。
• 命名以 hotfix/ 开头,建议的命名规则:hotfix/user_createtime_hotfix 
• 当问题修复完成后,需要合并到 master 分⽀和 develop 分⽀并推送远程。⼀旦修复上线,便
将其删除。

以上讲解的是企业级常⽤的⼀种Git分⽀设计规范:Git Flow模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(Golang)初识Go语言!!为什么选择Go?如何配置Go的开发环境?VS Code如何配置Go环境?

1. Go能做什么? go的优点:运行速度快、并发能力强 Go的应用领域: 区块链应用(BT、分布式账本技术) 后端服务应用 例如: 美团后台流量支撑程序 支撑主站的后台流量(排序、推荐、搜索等&#xf…

芯知识 | NVH-FLASH语音芯片支持平台做语音—打造音频IC技术革新

随着科技的飞速发展,人们对于电子产品的音频性能要求越来越高。在这种背景下,NVH-FLASH系列语音芯片应运而生,作为音频IC领域的一次重大技术革新,NVH-FLASH系列语音芯片凭借其卓越的性能与灵活的支持平台,正逐步引领着…

Java 解决阿里云OSS服务器私有权限图片通过URL无法预览的问题

简单描述一下此场景的业务: 由于系统中需要将上传的图片在系统中展示(private私有权限不能直接通过url直接展示),不想通过先下载下来然后以流的形式返回给前台展示这种方法很不友好,毕竟现在前台展示方式都是通过图片URL进行展示,所以就上官网查看API文档,果然找到了解决…

【数据库】Mysql的锁类型

Mysql中的锁机制主要是为了保证数据的一致性和完整性,在并发的情况下起着至关重要的作用。其中锁的类型主要是分为以下几种: 按照粒度分类 全局锁:对于整个数据库实例进行枷锁,加锁后整个实例就处于只读的状态。局锁通常用于需要…

Gin框架操作指南01:开山篇

Gin是目前最流行,性能最好的的GoWeb框架,几乎成为了学习GoWeb必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档的很多示例代码又不全&#xff…

基于卷积神经网络的中草药识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 卷积神经网络,中草药识别系统,resnet50,mobilenet【pytorch框架,python】_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的中…

3.添加缓存和缓存更新策略

项目地址:https://github.com/liwook/PublicReview 添加缓存 查询商铺缓存 我们查询商店的时候,通过接口查询到的数据有很多,我们希望在此用Redis缓存数据,提高查询速度。 对于店铺的详细数据,这种数据变化比较大&a…

Win安装Redis

目录 1、下载 2、解压文件并修改名称 3、前台简单启动 4、将redis设置成服务后台启动 5、命令启停redis 6、配置文件设置 1、下载 【下载地址】 2、解压文件并修改名称 3、前台简单启动 redis-server.exe redis.windows.conf 4、将redis设置成服务后台启动 redis-server -…

xlnt加载excel报错:xl/workbook.xml:2:2581: error: attribute ‘localSheetId‘ expected

解决方案 大家不一定能看懂,地址里说的啥意思,地址过去主要说明了从https://github.com/musshorn/xlnt/tree/issue_685合入可以解决问题,后面再想推送到官方地址,但没人维护了。 我这边直接给大家说一个结果就是:问题…

python 爬虫 入门 四、线程,进程,协程

线程和进程大部分人估计都知道,但协程就不一定了。 一、进程 进程是操作系统分配资源和调度的基本单位,一个程序开始运行时,操作系统会给他分配一块独立的内存空间并分配一个PCB作为唯一标识。初始化内存空间后进程进入就绪态,PC…

GUI编程

GUI编程 【Java从0到架构师课程】笔记 GUI简介 GUI:图形用户界面,在计算机中采用图形的方式显示用户界面 java的GUI开发 AWT:java最早推出的GUI编程开发包,界面风格跟随操作系统SWT:eclipse就是java使用SWT开发的Sw…

【ArcGIS微课1000例】0125:ArcGIS矢量化无法自动完成面解决方案

文章目录 一、坐标系统问题二、正确使用自动完成面工具一、坐标系统问题 1. 数据库坐标系 arcgis矢量化的过程中,无法自动完成面,可能是因为图层要素没有坐标系造成的。双击数据库打开数据库属性,可以查看当前数据框的坐标系。 2. 图层坐标系 双击图层,打开图层属性,切…

从零开始学PHP之变量作用域数据类型

一、数据类型 上篇文章提到了数据类型,在PHP中支持以下几种类型 String (字符串)Integer(整型)Float (浮点型)Boolean(布尔型)Array(数组)Objec…

滤波算法与SLAM:从概率角度理解SLAM问题

滤波算法与SLAM 第三章:MAP/MLE问题和贝叶斯网络 文章目录 滤波算法与SLAM前言一、最大后验问题(MAP)与最大似然问题(MLE)二、贝叶斯网络与SLAM问题三、因子图与SLAM问题四、从概率角度理解Kalman Filter与SLAM 前言 …

我谈傅里叶变换幅值谱的显示

在图像处理和分析中通常需要可视化图像傅里叶变换的幅值谱。通过幅值谱,可以直观地观察频率成分的分布,帮助理解图像的结构和特征。 很多刊物中直接显示傅里叶变换的幅值谱。 FFT fftshift(fft2(double(Img))); FFT_mag mat2gray(log(1abs(FFT)));由…

【Linux】线程基本概念,线程控制

目录 基本概念 重新理解进程 线程真实存在吗? 问题解答 线程资源 线程控制 线程创建 如何全面看待线程函数传参 如何看到线程函数返回 线程查询 线程等待 线程终止 线程分离 基本概念 线程(thread)是指在单个进程内,多…

探索前端与 AI 的结合:如何用 GPT-4 助力开发效率

前言:开发者的“神队友” GPT-4 还记得那些深夜奋战,紧盯着屏幕敲代码的日子吗?表单不验证、布局乱飞、BUG 根本找不到,这些时刻简直能让人抓狂。你可能会想:“要是有个智能助手能帮我搞定这些多好!” 那么…

#HarmonyOS:页面和自定义组件生命周期

页面生命周期 即被Entry装饰的组件生命周期 onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。onPageHide: 页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。onBackPress: 当用户点击返回按钮是触发 组件…

全面了解 NGINX 的负载均衡算法

NGINX 提供多种负载均衡方法,以应对不同的流量分发需求。常用的算法包括:最少连接、最短时间、通用哈希、随机算法和 IP 哈希。这些负载均衡算法都通过独立指令来定义,每种算法都有其独特的应用场景。 以下负载均衡方法(IP 哈希除…

如何让自己的网站,被更多的人搜索到(免费方案)

文章目录 一、要做时间的朋友二、需要独立IP的服务器三、SEO信息如何设置设置网站TDK生成网站地图设置搜索引擎自动提交部署SSL证书加分项:定期更新文章 引言: 许多人都有这样一个问题:做好自己的网站,如何让这个网站被更多的人浏…