【Git教程 之 版本控制】

news2024/12/26 21:05:06

Git教程 之 版本控制

  • Git教程 之 版本控制
  • 版本控制
    • 版本控制类型
      • 单用户版本控制系统(VCS)
        • 单用户版本控制系统(VCS)特点
        • 常见的单用户版本控制系统(VCS)
      • 集中式版本控制系统(CVCS)
        • 集中式版本控制系统(CVCS)特点
        • 常见集中式版本控制系统(CVCS)
        • 常见集中式版本控制系统(CVCS)局限
      • 分布式版本控制系统(DVCS)
        • 分布式版本控制系统(DVCS)特点
        • 常见分布式版本控制系统(DVCS)
        • Git
        • 分布式版本控制系统(DVCS)特性
    • 版本控制总结

Git教程 之 版本控制

版本控制

版本控制(Version Control),也称为修订控制(Revision Control)或源代码管理(Source Code Management, SCM),是一种用于管理对文档、计算机程序、大型网站和其它信息集合的更改的技术。它使得团队成员能够协作工作,同时跟踪每一个修改,并且可以在需要时恢复到以前的版本。

** 上面的介绍太官方** 看起来不是很清楚。
其实举个我们实际生活中的例子,如果你写过毕业论文的话。我们的毕业论文一般都要有很多次修改,而且我们是用word编辑毕设论文,那么在这个过程中,会出现什么情况呢?

在这里插入图片描述
而且很容易出现,我们忘记保存,或者改名字改错了把一些版本给覆盖的情况,是不是,所以在这个地方,我们需要一种管理工具,能够有效跟踪我们的每一个修订,而且可以恢复到任何一个版本,也许我们还会需要能够对比两次版本的差异等等功能,而不是我们手动去改(这样极容易出错)。

版本控制类型

由版本控制的发展历史来,我们的版本控制发展,大概分为三个类型:单用户版本控制系统(VCS)、集中式版本控制系统(CVCS)、
分布式版本控制系统(DVCS)。单用户的版本控制只能提供单机的版本控制,现代的版本控制一般是为了多人协作,所以我们就简单介绍一下单用户版本控制系统(VCS),主要大家使用的是集中式版本控制系统(CVCS)、分布式版本控制系统(DVCS)。

单用户版本控制系统(VCS)

单用户版本控制系统(VCS),也称为本地版本控制系统,是最早期的一种版本控制形式,主要用于个人项目或单一开发者的环境中。这类系统的主要目的是帮助开发者跟踪文件的修改历史,以便能够在需要时恢复到之前的版本。尽管它们的功能相对简单,但对于小型项目或者个人工作来说已经足够

单用户版本控制系统(VCS)特点
  1. 本地化
  2. 简单
  3. 提供基础的历史记录能力
  4. 缺乏分支能力
  5. 多人协作能力有限
常见的单用户版本控制系统(VCS)
  1. RCS (Revision Control System)
  2. SCCS (Source Code Control System)
  3. Pristine File System (PFS)

集中式版本控制系统(CVCS)

集中式版本控制系统通过一个中央服务器存储所有版本库的数据,开发者从服务器检出代码进行修改,然后提交回服务器。常见的 CVCS 工具包括 CVS 和 Subversion (SVN)。

集中式版本控制系统(CVCS)特点
  1. 单一中央仓库
  2. 依赖网络
  3. 权限控制
  4. 修订记录跟踪
  5. 支持多人协作
常见集中式版本控制系统(CVCS)
  1. CVS (Concurrent Versions System)
  2. Subversion (SVN)
  3. Perforce Helix Core
常见集中式版本控制系统(CVCS)局限

因为上面介绍的集中式版本控制系统(CVCS)特点,所以它的局限点在于

  • 单点故障, 中央仓库如果出现故障,则整个系统不可用
  • 使用的时候需要网络与中央仓库连接
  • 多人协作解决冲突比较繁琐

分布式版本控制系统(DVCS)

**分布式版本控制系统(Distributed Version Control System, DVCS)**是一种将整个代码库,包括其完整历史记录,复制到每个开发者本地的工作副本中的版本控制系统。与集中式版本控制系统不同,DVCS 不依赖于中央服务器来管理版本库;相反,每个开发者都拥有一个完整的、独立的仓库副本。这种设计带来了许多优势,尤其是在团队协作和离线工作方面。

分布式版本控制系统(DVCS)特点
  1. 分布式存储
  2. 可以支持离线工作
  3. 快速操作
  4. 强大的合并能力
常见分布式版本控制系统(DVCS)
  1. Bazaar (bzr)
  2. Mercurial (Hg)
  3. Git
Git
  • 由 Linus Torvalds 创建:Git 是为了帮助 Linux 内核开发而创建的,自 2005 年发布以来迅速成为最流行的 DVCS。
  • 高性能:Git 的设计目标之一就是高效处理大规模项目,它使用 SHA-1 散列值来确保数据完整性和安全性。
  • 社区支持广泛:拥有庞大的用户群体和活跃的开源社区,提供了丰富的文档和工具链。
  • GitHub 等平台的支持:像 Gitcode、Codehub 和 Gitee以及Github 这样的平台极大地促进了 Git 的普及,为开发者提供托管服务、问题跟踪、持续集成等功能。
分布式版本控制系统(DVCS)特性
  • 不依赖网络,可以提高生产力
  • 更好的协作体验,git的创建分支都是非常轻量的操作
  • 可靠性,因为每一个用户都有完整的仓库记录
  • 可以构造多种工作流程,常见的工作流程如下
    • 中心化工作流(Centralized Workflow)
    • 功能分支工作流(Feature Branch Workflow)
    • Gitflow 工作流
    • Forking 工作流
    • GitHub Flow
    • Trunk-Based Development
    • Branch by Abstraction

简单介绍一些工作流程

  1. 中心化工作流(Centralized Workflow)
    这是最简单的 Git 工作流,类似于集中式版本控制系统(CVCS)的工作方式。所有开发者都从一个中央仓库拉取代码,在本地进行开发后,再推送到中央仓库。
  • 优点:易于理解和实现,适合小型团队或项目。
  • 缺点:单点故障风险,如果中央仓库出现问题,整个团队的开发都会受到影响。
  1. 功能分支工作流(Feature Branch Workflow)
    在这种工作流中,开发者为每个新功能创建一个独立的分支。功能完成后,将分支合并回主分支(如 main 或 master)。这允许并行开发多个功能,同时保持主分支的稳定性。
  • 优点:促进并行开发,减少主分支上的冲突。
  • 缺点:需要良好的分支管理和合并策略来避免复杂的合并历史。
  1. Gitflow 工作流
    Gitflow 是一种更结构化的分支管理模型,特别适用于发布周期明确的项目。它定义了几个长期存在的分支:
  • main / master:用于稳定发布的代码。
  • develop:用于集成所有正在开发的功能。
  • feature/*:用于开发特定功能的短期分支。
  • release/*:当准备发布时,从 develop 分支创建,用来做最后的调整和测试。
  • hotfix/*:紧急修复直接应用于 main 和 develop 分支。
  • 优点:清晰的角色分配,支持复杂的发布流程。
  • 缺点:对于小型或快速迭代的项目来说可能过于复杂。
  1. Forking 工作流
    Forking 模型通常用于开源项目,每个贡献者都有自己的远程仓库副本(fork)。开发者在自己的 fork 上进行开发,然后通过 Pull Request(PR)请求合并到上游的主仓库。
  • 优点:确保只有经过审查的更改才能进入主仓库,保护了主仓库的完整性。
  • 缺点:增加了协作成本,因为每次贡献都需要通过 PR 流程。

选择合适的工作流取决于团队规模、项目需求和技术栈等因素。对于大多数团队而言,功能分支工作流和 Gitflow 是比较流行的选择,它们提供了足够的灵活性和结构性来适应不同的开发场景。而对于开源项目或外部贡献较多的情况,Forking 模型则更为合适。就我现在的工作情况,我们目前就是采用的功能分支工作流这种工作方式。

版本控制总结

如果是初学者,你只需要了解一下版本控制的概念,以及为什么我们需要版本控制,重点了解一下Git与分布式版本控制的概念,如果感觉这些概念有些陌生,也没有关系,后续我会继续发完整的Git的入门的知识,等看完后续的文章,估计就可以对这些概念有一个比价深入的理解,请大家继续关注我。也欢迎大家评论,点赞,收藏。

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

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

相关文章

.NET Framework修复工具

某些精简Windows系统或者第三方下载的改版Windows系统在安装.NET Framework的时候会出现类似下面的错误信息: 可以使用微软官方出的.NET Framework修复工具解决, 下载地址: 【免费】.NETFramework修复工具资源-CSDN文库 下载后运行即可修复系统里的.NET Framework

计算机毕业设计Python轨道交通客流预测分析可视化 智慧交通 机器学习 深度学习 人工智能 爬虫 交通大数据

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

从计算服务器角度看智算与算力

计算服务器于智算和算力领域的地位堪称中流砥柱。人工智能旨在赋予计算机人类智能的使命,对计算服务器提出了近乎苛刻的要求。 在智算层面,它是计算服务器通向高效能的核心动力。凭借 CPU 与 GPU、FPGA、ASIC 等构建的异构组合,计算服务器可…

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具,用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈,并基于优化建议进行改进。 核心功能&…

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…

使用Hadoop MapReduce进行大规模数据爬取

Hadoop MapReduce概述 Hadoop MapReduce是一个编程模型,用于处理和生成大数据集。它由Map和Reduce两个主要阶段组成。Map阶段负责处理输入数据,并将结果输出为键值对;Reduce阶段则对Map阶段的输出进行汇总和合并,生成最终结果。 …

AI驱动的低代码平台:解密背后的算法与架构创新

引言 在如今的数字化浪潮中,企业对软件的需求正以前所未有的速度增长。传统的开发方式由于开发周期长、成本高,已逐渐无法满足市场的快速变化。而低代码平台的出现,使得开发者和业务人员能够以极简的方式快速构建应用。然而,随着企…

【Spring工具插件】lombok使用和EditStarter插件

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入 一:lombok介绍 1:引入依赖 2:使用 3:原理 4&…

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上,全新Mate70系列及多款全场景新品正式亮相。在游戏领域,HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit(图形加速服务…

Zynq(6)FATFS读写eMMC

文章目录 1.简介eMMc与FAT2.eMMC与FAT的关系3.添加xilinx库4.用 FATFS完成emmc的读写5.传送门 1.简介eMMc与FAT eMMC (embedded MultiMediaCard) 是一种嵌入式闪存存储解决方案,由NAND闪存和内置的控制器组成,NAND闪存存储数据,而控制器负责…

【Linux】gdb / cgdb 调试 + 进度条

🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、Linux调试器-gdb 🌟开始使用 🌠小贴士: 🌟gdb指令 🌠小贴士: ✨watch 监视 ✨打条件断点 二、小程序----进…

如何解决maven项目使用Ctrl + /添加注释时的顶格问题

一、问题描述 相信后端开发的程序员一定很熟悉IDEA编译器和Maven脚手架,使用IDEA新建一个Maven工程,通过SpringBoot快速构建Spring项目。在Spring项目pom.xml文件中想添加注释,快捷键Ctrl /,但是总是顶格书写。 想保证缩进统一…

python学习——数据的验证

文章目录 1. str.isdigit()2. str.isnumeric()3. str.isalpha()4. str.isalnum()5. str.islower()6. str.isupper()7. str.istitle()8. str.isspace()实操 以下是Python中字符串数据验证方法的详细解释: 1. str.isdigit() 这个方法用于检查字符串中的所有字符是否都…

基于Springboot+Vue的在线答题闯关系统

基于SpringbootVue的在线答题闯关系统 前言:随着在线教育的快速发展,传统的教育模式逐渐向互联网教育模式转型。在线答题系统作为其中的一个重要组成部分,能够帮助用户通过互动式的学习方式提升知识掌握度。本文基于Spring Boot和Vue.js框架&…

Web(CSS+JS+HTML实现简单界面)

前言 写的是个人博客界面,代码比较冗余,web的一个小作业。。。。。。 因为后面改了一次,有些css是直接写到了html文件中,重复的代码也比较多。 项目结构 CSS style.css * {margin: 0;padding: 0;box-sizing: border-box; }b…

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题: 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下: matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…

VCU——matlab/simulink软件建模

一、认识MATLAB/Simulink 1. matlab主界面 2. simulink 二、Simulink 建模基础 1. Simulink模块 2. 模型的仿真 matlab 中比较两个浮点型,不要用,采取差值和Compare To Constant的方案 3. 自动代码生成

(软件测试文档大全)测试计划,测试报告,测试方案,压力测试报告,性能测试,等保测评,安全扫描测试,日常运维检查测试,功能测试等全下载

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Crash-SQLiteDiskIOException

目录 相关问题 日志信息 可能原因 问题排查 相关问题 蓝牙wifi无法使用 日志信息 可能原因 磁盘空间不足:当设备上的可用存储空间不足时,SQLite无法完成磁盘I/O操作,从而导致SQLiteDiskIOException。 数据库文件损坏:如果数…