如何使用简单的分支策略来保护您的 Git 项目

良好的分支策略可以使项目源代码获得一致且安全的数据,所有协作者可以在更短的生命周期内共享和访问这些数据。

您必须以灵活的方式设计项目模型,以便对所有成员角色和权限进行良好的管理。

我要谈论的并没有什么令人惊讶的新鲜事。您可能已经知道一些 git 概念和命令,但我的想法是利用您的思维过程,从您已经了解的 Git 中做出更好的选择。

本文的要点:

您将了解什么 git 工作流程可能适合您当前的项目代码
根据项目开发的代码类型,在不同的并行运行分支上隔离和组织项目代码。
采用灵活的实时分支模型
了解如何使用gitlab  (一种云托管的版本控制服务)在分支上设置哪些准则。
使用受保护的分支和策略在 GitLab 上托管您的项目。
简要想法/大纲
根据您的项目模型,Git 既可以充当集中式版本控制系统,也可以充当分散式版本控制系统 (VCS)。正如我们所知,Git 的分布式特性是为了方便大量贡献者同步协作他们的工作而开发的。理想的 git 工作流程模型的选择取决于贡献者的数量、存储库和分支的权限级别层次结构,以及所选的架构模型是集中式还是分散式?

一个理想的分支策略,在实践中应该声明一套指导方针,保护分支免受读写权限,并限制对分支的未经授权的创建、删除、强制推送。

无论您是在Linux 服务器上还是在Web 托管、基于云的源代码控制服务上维护源代码,都可以以结构化方式创建分支并保护它们的某些成员和操作。

我从之前的实时航空公司计费项目中采用的分支模型创建起来非常简单并且易于遵循。管理团队、开发、测试、运营和 QA 团队等不同团队和谐地合作,为项目源代码做出贡献。

Git 分支模型

这种方法让您只有稳定的 QA 批准的提交才能通过压缩合并策略从“ release ”分支推送到“ prod ”分支。“ master_prod ”仅接受来自“ prod ”分支的源代码的最终提交。

主要代码开发发生在功能和主题分支上。

“master_prod”是部署就绪分支。CD 管道可以在此分支上实现自动化,以便在 DevOps 环境设置中进行持续部署。

所需先决知识
我假设你:

了解git 概念和命令,并了解如何使用 git 工作流程开发项目
了解git 分支 — 创建、合并、解决冲突和删除
了解如何将远程存储库添加或克隆到 GitHub 或 GitLab 上的本地项目以发布您的作品。
了解我们为什么、何时以及如何使用 git fetch、pull 和 push 来与远程存储库同步并与协作者协调工作。
一般的思考过程如下:

开发分支模型
决定 VCS 和模型架构的类型
选择 git 工作流程模型
选择分支策略
创建分支并定义准则
定义成员角色和权限
保护 gitlab 上的分支并维护分支指南
VCS 和模型架构类型
所需的版本控制架构取决于您的项目数据、管理设置以及团队规模。在具有许多协作者的大型项目中,必须有灵活的源代码管理 (SCM) 设置。

假设您已经赞成使用 Git,因为它快速、分布式、灵活,具有强大的分支和合并功能,并且保留良好的历史记录,可以让您修复错误并以有组织的方式分析代码; 分布式版本控制系统(DVCS)架构将是您的选择。

在 DVCS 模型中,所有机器既充当“节点”又充当“中心”。然而,在集中式版本控制系统中,每个开发人员仅充当“节点”,而中央服务器充当“集线器”。

如果您的团队有早期集中式 VCS(例如 Subversion、CVS 或 ClearCase)的背景,那么 Git 的集中式工作流程模型很可能会吸引您。

您希望在大型项目中使用 Git 作为 VCS 的另一个原因是维护数据完整性;因为 git 永远不会允许你们覆盖彼此的工作。

每次开发人员尝试将新提交推送到自上次签出以来已经接受其他开发人员提交的中央存储库时;您的推送将被拒绝,因为它不会是快进合并。您必须获取并合并其他人的更改,然后在此基础上进行工作。

这样,许多开发人员就可以通过无数分支和谐地工作,贡献每个人的工作,而无需干涉彼此的更改。

有了这个令人信服的说明,我们将继续为您的项目选择 Git 分布式版本控制系统 (DVCS)。阅读git 3 层架构工作流程可能会感兴趣,以快速介绍 git 工作流程并了解所使用的 git 术语。

选择 Git 工作流程模型
无论您遵循哪种git 工作流程模型,良好的分支策略都会让您更接近稳定的模型。Git 提供了强大、灵活、稳定的工作流程模型,可以轻松地在庞大的团队中进行协作工作。

具有共享存储库模型的Git集中式工作流程为您提供与 SubVersion、ClearCase 或 CVS 版本系统相同的舒适区,同时保持各个贡献者之间的数据完整性。

通过设置集成管理器工作流程,可以在具有多个远程存储库概念的大型项目中实现分布式方法。在这里,每个开发人员都必须对其自己的公共存储库进行写入访问,而对其他人的公共存储库进行只读访问。维护者扮演的主要角色是协作(拉取和合并)每个开发人员的工作到自己的存储库中,并将其发布到主存储库上,然后其他开发人员可以从中克隆。

如果您正在开发一个具有多个远程存储库的大型项目,请选择独裁者和中尉工作流程。工作的协作被分配给拥有存储库的特定部分的各个副官,并且仅合并来自某些开发人员的工作。独裁者被分配来拉取和合并所有副官的更改,最终将所有协作工作发布到主存储库。

----

注意:在选择工作流程模型或模型组合时,考虑将影响实时工作流程的真实场景变量也很重要。

贡献者数量 –> 如何使更改不断更新 - 在进行自己的更改之前首先采用拉动策略。
工作流程 –> 集中式还是分布式?合并前是否对代码进行了审查,是否有合并请求程序可供遵循?
提交访问权限 -> 应在哪个分支上分配哪些读写访问权限?
独裁者和中尉工作流程将是大型项目的理想选择。

选择分支策略
下一步是创建不同的分支并为每个分支分配角色。如果您需要快速了解什么是 git 分支以及如何创建和管理它们;请参阅Git — 模块 3:分支和合并

根据分支用于的代码开发类型,分支可以简单地分类为:

稳定/集成或长期运行的分支- 这些通常具有干净的历史记录,没有三向合并,并且具有较短的用户友好历史记录。在我们的项目示例中,“prod”和“master_prod”是两个这样的稳定​​分支。

发布分支将所有功能和修补程序分支的更改提交合并为一个。这是验证、审查和解决冲突的地方。(参考:git解决冲突-第6点。合并工具(diffmerge):解决冲突)。

发布分支应该有一个非线性且混乱的提交历史记录,这样可以更容易地列出整个项目的提交历史记录,并分析项目是如何开发的、哪些提交是由谁创建的以及进行了哪些更改。

功能分支从主开发分支(更常见的是“主”分支)分支出来。这用于开发人员开发特定代码。这些是针对特定代码问题或修复的短期分支;例如反馈甚至新功能。功能分支上的工作在获得批准后将合并到稳定分支中。我的功能分支是“dev”和“uat”。

不稳定或修补分支是为开发和测试错误修复而创建的短期私有快速修复分支。它们被合并到功能分支中并被删除。“hotfix”在我的项目中是一个不稳定的分支。

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

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

相关文章

在idea中写sql语句,向数据库添加数据时,添加的字符串却显示???,解决方法

这是字符编码的问题 如何解决: 在idea的配置数据库的地方修改下边:mysql8版本和5版本差距不大。 在URL后加?useUnicodetrue&characterEncodingUTF8 例如 原来:String url “jdbc:mysql://localhost:3306/stu”; 改变后:St…

利用ARCGIS做地下水脆弱性评价分析

(一)行政边界数据、土地利用数据和土壤类型数据 本文所用到的河北唐山行政边界数据、土地利用数据和土壤类型数据均来源于中国科学院资源环境科学与数据中心(https://www.resdc.cn/Default.aspx)。 (二)地…

hadoop完全分布式搭建

文章目录 集群部署规划服务器准备Mobaxterm 远程登录实验前准备安装软件工具关闭防火墙 安装 JDK 和 Hadoop创建软件包目录解压软件包配置环境变量 集群搭建先创建 HDFS 工作目录和 LOG 目录配置集群配置环境配置 HDFS 主节点信息、持久化和数据文件的主目录配置 HDFS 默认的数…

技巧-GPU显存和利用率如何提高和batch_size/num_works等参数的实验测试

目录 简介实验测试显存占用问题GPU占用率波动问题num_work不是越大越好 总结 本专栏为深度学习的一些技巧,方法和实验测试,偏向于实际应用,后续不断更新,感兴趣童鞋可关,方便后续推送 简介 在PyTorch中使用多个GPU进行模型训练时,各个参数和指标之间存在一定的关系…

three.js结合vue

作者:baekpcyyy🐟 1.搭建环境 ps:这里要按照node.js在之前有关vue搭建中有介绍 新建文件夹并在vsc终端中打开 1.输入vite创建指令 npm init vitelatest然后我们cd进入刚才创建的目录下 npm install安装所需依赖 npm run dev启动该项目 …

LLVM学习笔记(63)

4.4.3.3.2.3. 向量操作数类型的处理 下面开始处理向量类型。在默认情形下这些操作都会拆分为更小的操作或者调用库。 X86TargetLowering::X86TargetLowering(续) 667 // Some FP actions are always expanded for vector types. 668 for…

全栈软件开发工程师需要具备哪些技能

全栈软件开发工程师需要具备前端、后端和数据库等多方面的技能,以便能够在整个应用开发周期中承担各种任务。以下是典型的全栈软件开发工程师的技能栈: 一、前端技能: 1.HTML/CSS/JavaScript: 构建网页的基本技能,负责页面结构、样…

前端笔记:React的form表单全部置空或者某个操作框置空的做法

原创/朱季谦 在React框架前端开发中,经常会有弹出框的开发,涉及到弹出框,难免就会有表单。一般在关闭弹出框或者对表单联动时,往往都需要考虑对表单进行置空操作了。 我以前在工作就遇到过这类问题,正好顺便对表单置空…

【UE】中文字体 发光描边材质

效果 步骤 1. 先将我们电脑中存放在“C:\Windows\Fonts”路径下的字体导入UE 点击“全部选是” 导入成功后如下 2. 打开导入的“SIMSUN_Font”,将字体缓存类型设置为“离线” 点击“是” 这里我选择:宋体-常规-20 展开细节面板中的导入选项 勾选“使用距…

【投稿优惠、可EI检索】2024年机器人学习与自动化算法国际学术会议(IACRLAA 2024)

2024年机器人学习与自动化算法国际学术会议(IACRLAA 2024) 2024 International Academic Conference on Intelligent Control Systems and Robot Learning 一、【会议简介】 本届机器人学习与自动化算法国际学术会议(IACRLAA 2024)将于2024年1月23日在北京盛大开幕。这次会议将…

深信服技术认证“SCSA-S”划重点:SQL注入漏洞

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】YOLOV5

目录 算法原理 网络结构 1.1 Backbone 1.2 Neck 1.3 Head 损失计算 4.1 总损失

软件设计之原型模式

原型模式是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。拷贝分浅拷贝和深拷贝。浅拷贝无法拷贝引用对象。在面试的时候,我们会投多家公司,根据岗位的不同我们会适当调整。使用原型模式可以快速达到需求,下…

新时代物联网区块链如何链接底层商业?传统商家如何利用区块链实现转型?

随着新时代的到来,物联网和区块链技术的结合正在改变商业领域的运作模式。对于传统商家而言,如何利用区块链技术实现商业模式的转型和升级,成为了一个值得探讨的问题。本文将探讨新时代物联网区块链如何链接底层商业,并阐述传统商…

推荐几款python在线学习和电子书网站

学习python的过程中,虽然下载了很多的电子书,但是在学习过程中基本上都是通过一些在线网站或者在线电子书进行的。 下面给大家推荐几个在线学习教程网站和电子书网站。 《菜鸟教程》 一句话介绍:很多初学者的选择 网址:https:…

编译企业微信会话内容存档PHP版SDK扩展

1.下载SDK 如果克隆不了,就页面下载 git clone https://github.com/pangdahua/php7-wxwork-finance-sdk2.下载企微官网C版本的最新sdk文件 下载地址:https://wwcdn.weixin.qq.com/node/wework/images/sdk_20201116.rar 下载以后将解压之后的文件夹里l…

plt创建指定色系

1、创建不连续色系 import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap# 定义颜色的RGB值 colors [(0.2, 0.4, 0.6), # 蓝色(0.8, 0.1, 0.3), # 红色(0.5, 0.7, 0.2),(0.3,0.5,0.8)] # 绿色# 创建色系 cmap ListedColormap(colors)# 绘制…

mysql which is not in SELECT list; this is incompatible with DISTINCT解决方案

mysql报错Expression #1 of ORDER BY clause is not in SELECT list, references column ‘xxx’ which is not in SELECT list; this is incompatible with DISTINCT解决方案: 这是在 mysql5.7 版本,DISTINCT 与 order by 在一起用时则会报3065错误。因…

【复位与释放(亚稳态)模为60的BCD码计数器_2023.11.22】

复位与释放&#xff08;异步复位&#xff0c;同步释放&#xff09; 同步复位rst、同步置数load&#xff08;置数信号只有在时钟上升沿到来时才能生效&#xff09;、同步清零clr 同步复位&#xff1a; always(posedge clk) if(!rst_n) b<1’b0; else b<a; 同步复位信号rs…

Linux--系统结构与操作系统

文章目录 冯诺依曼体系结构为什么要有内存&#xff1f;场景一 操作系统何为管理&#xff1f; 冯诺依曼体系结构 冯诺依曼体系结构是计算机体系结构的基本原理之一。它将程序和数据都以二进制形式存储&#xff0c;以相同的方式处理和存取。 上图是冯诺依曼体系结构的五大组成部…