【Git】Git 快照 Snapshot

news2024/11/24 16:12:44

Git 快照 Snapshot

在对 Git 基础的学习过程中,我们了解了 Git 仓库的基本结构:

  1. 工作目录
  2. 暂存区
  3. 版本库,即 .git 仓库

在这里插入图片描述

下面我们就通过一次修改、暂存以及提交的工作流程,来理解快照(Snapshot)的概念。

现在,我们在工作目录下新增三个文件:test1.txttest2.txttest3.txt。然后,我们执行 git add 将这三个文件暂存。那么,此时这个指令做了哪些事呢?

  • 首先,它将这三个文件分别创建3个校验和添加到暂存区中。在前面对 Git 基础的学习中, 我们了解到,校验和是 Git 通过 SHA-1 哈希算法遍历每一个文件并根据文件内容等信息,为文件创建的一个唯一索引。因此,我们可以通过这个唯一索引,取出相应文件的完整内容。
  • 然后,Git 对当前的暂存区拍了一张“照片”,即快照,并将快照放入了版本库中。那么快照里面包括哪些内容呢?快照中包括前面所说的唯一文件索引相应文件的完整内容,其采用类似于 key-value 的结构存储这些信息,同时,Git 使用内置的blob对象来存储这些文件的快照。

在这里插入图片描述

暂存修改后,执行 git commit,这条指令又做了哪些事情呢?

  • 首先,Git 通过一个内置的 tree 对象,将文件的目录结构保存下来。
  • 然后,Git 在这个 tree 对象上又包裹了一层,创建了一个 commit 对象,这个 commit 对象也是 Git 进行版本管理的最终对象。commit 对象中包含了 tree 对象以及作者、提交描述等信息

在这里插入图片描述

同时,需要注意的是,在 tree 对象中,实际上包含了对快照的引用,即对所有文件索引的引用。

因此,我们可以总结一下快照的概念:

快照就是在执行git addgit commit时,对当前暂存区的情况拍摄的一张“照片“,这个照片中涵盖的若干信息将被存放到git版本库下。这些若干信息包括:

  1. 文件的索引+文件的完整内容(key-value结构)
  2. 文件的目录结构
  3. 提交信息

这三者分别用 Git 内置的 blob,tree,commit 对象进行存储。

接下来,我们再次对test2.txt文件进行修改,然后再执行git add和git commit操作:

在这里插入图片描述

这里可以看到,在给当前暂存区拍完快照后,Git 发现test1.txttest3.txt的内容没有变化。因此它只把test2.txt的相关信息存入版本库,并生成了新 tree 和 commit 对象

同时,旧test2.txt新test2.txt信息是共存在版本库里的。因此 Git 每次照下保存的都是文件的完整信息,而不是文件的差异

另外,暂存区的内容也不会随着git commit的完成而消失,因此“把暂存区文件提交上去”这种说法是不准确的,更准确的说法是,暂存区保存着当前待提交的状态,Git 对这个状态拍了照,然后把照片转换成若干信息存入版本库。

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

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

相关文章

基于Docker的JMeter分布式压测实战讲解

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示,一个JMeter实例将能够控制许多其他的远程JMeter实例,并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站…

Linux:基础开发工具之Makefile和缓冲区的基本概念

文章目录 动静态库自动化构建代码缓冲区 动静态库 首先要知道什么是链接: C程序中,并没有定义printf的函数实现,且在预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现 系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没…

旋转偏心裁切刀切向跟踪及半径补偿

1 裁刀半径补偿问题的提出 偏心裁刀一般皮革和纸箱行业用的比较多,它适用于裁切比较厚的材料。对于如图1所示的偏心裁刀,它的刀尖和旋转轴(也就是刀心)存在一个距离,设为半径r。由于改刀刀刃有方向,所以用该刀去切割直线时&#…

使用nvm管理node.js

使用nvm管理node.js 一、简介 nvm是一个node的版本管理工具。可以在多种系统上管理Node.js 版本的工具。使用 NVM,可以轻松地切换不同版本的Node.js,并方便地管理不同版本的全局包和本地包。 二、安装与下载 1.删除原有node.js 首先需要卸载已安装的…

免费音乐下载网站分享(MP3文件格式)

免费音乐下载网站分享(MP3文件格式) 最近需要下载一些歌曲,发现很多音乐app上下载文件都需要vip,再上网查询了一番,最后发现了一个宝藏网站,可以免费下载各种格式的MP3文件,在这里给大家分享一…

建设数字孪生智慧城市是未来城市的重要增长点

中国国家创新与发展战略研究会学术委员会常务副主席、重庆市原市长黄奇帆在《瞭望》撰文指出: AI时代的城市是由实体空间和数字空间组成的数字孪生城市,要充分重视对数字空间的治理。随着城市数字化进程的加快,城市、企业、个人开始形成多样化…

软件需求怎么写?

前言:一般来说,软件产品的需求人员的主要输出物就是软件需求,如果这个软件产品就XX系统,人们口中的“系统需求”和“软件需求”就没有什么区别了。在车企行业,推行这ASPICE体系,在这个体系中明确申请了系统…

2023工博会,正运动开放式激光振镜运动控制器应用预览(三)

展会倒计时:4天 本次的中国国际工业博览会正运动技术将携开放式激光振镜运动控制器ZMC408SCAN-V2亮相。 •绿色生产,减少材料和资源浪费,提升可持续性; •节省多套硬件成本,替代传统的激光加工系统,降低项…

【深度学习】树莓派Zero w深度学习模型Python推理

在机器学习开发过程中,当模型训练好后,接下来就要进行模型推理了,根据部署环境可分为三类场景: 边缘计算:一般指手机,嵌入式设备,直接在数据生成的设备上进行推理,因为能避免将采集…

MAC MINI 2012安装Montery折腾笔记

MAC MINI 2012安装Montery折腾笔记(作为电视盒子/远程开发机) 起因: 手头有个mac mini,2018年买的2手。一直都是10.12系统,处理python和苹果开发都受制于旧系统,很多软件也装不上,于是有了升级…

Qt开发 入门

1.Qt概述 什么是Qt 不论我们学习什么样的知识点首先第一步都需要搞明白它是什么,这样才能明确当前学习的方向是否正确,下面给大家介绍一下什么是Qt。 Qt是一个跨平台的C应用程序开发框架 具有短平快的优秀特质: 投资少、周期短、见效快、效益高几乎支持…

Java-集合类

集合 Java集合是Java中用于存储和管理一组对象的工具。Java集合提供了相应的方法,用于用户对集合内数据的操作。 Java集合类提供了许多不同的数据结构,如列表、队列、栈、集合和映射,以满足不同类型的编程需求。 程序中如何存储大批量同类型…

vue项目中使用特殊字体的步骤

写在前面 在项目中使用特殊字体,需要注意,所使用的特殊字体是否被允许商用或是个人开发,以及如何使用,切记不要侵权。 首先需要在对应字体网站下载字体文件,取出里面后缀名为.ttf的文件 然后把该文件放到src -> ass…

python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

切片 # # 切片# s hello word# # 下标索引为0的 # print(s[0]) #h# # 左闭右开 (左是下标开始的,右是几个索引值)例如从0开始算 4个索引值 # print(s[0:4]) #hell# # 更改起始值的开始位置 # print(s[1:]) #ello word# # 下标结束位置 # p…

生成式人工智能在高等教育 IT 中的作用

作者:Jared Pane 通过将你大学的数据与公共 LLMs 和 Elasticsearch 安全集成来找到你需要的答案。 根据 2023 年 4 月 EDUCAUSE 的一项调查,83% 的受访者表示,生成式人工智能将在未来三到五年内深刻改变高等教育。 学术界很快就询问和想象生…

9月14日作业

实现myVector #include <iostream>using namespace std;template <typename T> class myVector { private:T* data;int size;int capacity; public:// 构造函数myVector() : data(nullptr), size(0), capacity(0) {}//拷贝构造函数myVector(const myVector& o…

Jetson Xavier NX开发板无屏幕远程连接

设备&#xff1a; jetson nx &#xff08;ubuntu20.04&#xff09;,win10 目标&#xff1a;实现jetson nx不连接屏幕实现远程连接并控制 网上比较多的答案都是使用vnc,但本人亲尝试过了vnc只有在jetson nx开发板连接有屏幕时候才有空&#xff0c;一旦不连接屏幕&#xff0c;…

千兆以太网网络层 ARP 协议的原理与 FPGA 实现

文章目录 前言一、ARP 帧的应用场景和存在目的二、ARP 帧工作原理三、以太网 ARP 帧发包实例设计四、以太网 CRC校验代码五、以太网 ARP 帧发包测试---GMII1.模拟数据发送2.仿真模块3.仿真波形六、以太网 ARP 帧发包测试---RGMII1.顶层文件2 .仿真代码七、上板测试(RGMII)前言…

浅显易懂理解傅里叶变换

说起电子硬件专业&#xff0c;那不得不提的就是傅里叶变换了。 大学课程中应该吓倒了很多人&#xff0c;谈傅里叶色变了。 本次就来重新认识一下电子硬件中的傅里叶变化。 首先理解之前&#xff0c;当然是需要先知道傅里叶这位大牛的人物百科啦。 傅里叶是法国数学家&#xff0…

【数据结构】平衡二叉搜索树(AVL树)——AVL树的概念和介绍、AVL树的简单实现、AVL树的增删查改

文章目录 平衡二叉搜索树&#xff08;AVL树&#xff09;1.AVL树的概念和介绍2.AVL树的简单实现2.1AVL树的插入2.2AVL树的旋转2.2.1左旋2.2.2右旋2.2.3右左双旋2.2.4左右双旋 全部源码 平衡二叉搜索树&#xff08;AVL树&#xff09; 为什么要引入平衡二叉搜索树&#xff1f; 在之…