深入底层学git:目录中包含的秘密

news2024/10/7 16:27:12

1.Git简介
Git具有最优的存储能力,在没有远端git服务器的情况下,git本地就可以独立作为版本管控系统,这其中.git裸仓库中起了关键作用,那么我们一起来看看.git下都放了哪些文件。

打开Git Bash,切换到项目目录,具体命令,如下所示:

$ pwd
$ ll
$ cd git-rainbow/
$ ll
$ cd mtxcrm/
$ ls -la
图片

01
refs

除了上一篇文章提到的文件,还有哪些文件?

例如,refs引用,这个引用它指向的是什么呢?

图片

我们先切换到这个目录下去看看。

这个目录下包含heads和tags,说明什么?

说明我们的git仓库是可以有很多tags标签的,tags另一种翻译叫里程碑,也就是说,项目开发到一定程度,出了关键成果,比如说开发到v1.0版本,我们可以针对v1.0版本对应的commit打上一个标签,标识这是v1.0里程碑,也叫做tag;另外一种情况就是heads和这个目录对应的,heads对应的就是我们大家平时说的分支。

大家总说分支,分支又是什么呢?分支说白了,就是一个独立的开发空间,比如有些时候需要做前端开发,有些时候需要做后端开发,这个时候我们就可以在仓库中,为前端创建一个分支,为后端创建一个分支,前后端彼此在不同的分支里面,他们的工作是互相不影响的,当她们需要集成的时候,又可以将这两个分支集成到一个公共的分支,这个就是分支的作用。

图片

两者都是文件夹,我们切换到文件夹里面看看有哪些内容。

图片

先进入到heads文件夹。

heads目录下有 master、temp两个文件。我们分别看看master、temp这两个文件中存的是什么内容。

图片

之前我们谈到的HEAD表示,我们整个仓库正在工作在哪个分支下,因此HEAD里存的是一个引用,它指向了master或者指向了temp。

图片

指向refs下面的heads的下面的master或者temp。

图片

我们现在已经在refs下的heads目录下了。

图片

我们看看master文件中存的是什么?

master指向的是哪里呢?

图片

我们可以通过git cat-file -t查看这串字符串(git仓库存放的对象objects)代表的对象类型。

git cat-file -t 37af45d051cea
#37af45d051cea7efff9be02493366ba97fafa020
图片

通过执行命令后的返回结果看,它是一个commit类型。

通过以下命令git命令,发现master指向哪里?指向37af开头的commit。

git branch -av
图片

其实就是master指针指向哪一个commit,也就是说master中存的是master指向的哪个commit。

那么temp中指向的是什么呢?如果不出意外的话,猜测temp文件中存的是,存的是0c193开头的字符串,这串字符串也是指针。

图片

为什么指针(或者叫指向)字符串有长有短呢?

git的设计思路是,如果哈希值足以标识唯一性的话,展示短一些也可以。

图片

如果短的识别号不能保证唯一识别的情况下,这个时候我们就需要输入更长的唯一标识位的个数。

图片

我们再跳转到tags目录下,看看该目录下都存什么了。

图片

看版本历史树的时候如果有t创建tags的话会列举出来的。

我们看看是否有tags,使用如下命令:

ls -al
通过以下截图可见有tag。

图片

然后我们使用cat命令查看下css01(这是一个文件)中存的是什么?

分支指向的是commit,这个tag如果也是打在这个commit上的话,css01中的内容是不是就是commit的id号呢?

图片

我们用cat-file命令验证这个哈希值是什么?

*注意:哈希值不用全部复制粘贴,只要能保证唯一性即可。

从如下截图可见,css01文件里面存的是tag的信息

图片

我们再通过cat-file命令加参数p来看文件中内容。

从如下截图中该命令的返回结果可见,返回的第一行表明指向该哈希值5237b82ab6b455d7c236的object对象。

object 5237b82ab6b455d7c2360c0829b78e46d3c381d2

图片

我们尝试看看这个哈希值存的是什么?我们通过cat-file命令加t参数看类型,如下截图所示是commit。

图片

tag本身有一个40位的哈希值。

图片

css01是askii码标识出来的tag的名称,叫css01。

图片

css01中存的是tag的哈希值。

图片

然后看tag这个哈希值中存的是什么内容呢?从以下截图可见,里面包含一个object对象。

图片

这个对象的类型是commit

图片

02
objects

.git具仓库中还有一个至关重要的文件,也就是git文件系统核心内容,object。

从以下截图可见,objects目录下面很多文件夹,一般都是2个字符组成的。

pack文件存的是什么内容呢?git会做一个自我梳理过程,当2个字符的松散文件比较多的时候,git会自行打包,打包到pack目录下。

图片

我们尝试切换到两个字符的目录下看看里面有什么内容,比如0c?

0c和这里面的字符串合起来拼成一个完成的哈希值,

也就是0c加上193c2ebc6cddc2b7693cefc35f14f95ecd87af

图片

这也是commit类型。

图片

再找找其他目录看看有没有其他类型的。对象的类型包括blob, tree, commit, tag。

图片

tree树中的内容都包括什么呢?

100644 blob f432c2ba4f90913acf4a3774f73c5254e037dc07 rainbow.jpg

从以下截图可见,它说这个树里面有个文件,叫rainbow.jpg。

这个文件的哈希值是f432c2ba4f90913acf4a3774f73c5254e037dc07。

这里又有一个类型是blob,在git中blob表示文件的意思,也就是说rainbow.jpg是一个文件对象。

图片

我们来用cat-file加-t参数来验证下它是不是一个文件,从以下截图返回结果可见,这确实是一个文件对象。

图片

然后我们再通过cat-file加-p参数来看看这个文件中的内容,从以下截图乱码是图片内容。

图片

git的核心对象object存的类型是4类,分别是blob, tree, commit, tag

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

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

相关文章

王道考研——操作系统(第二章 进程管理)(进程;线程)

一、进程的概念、组成、特征 进程的概念 进程的组成——PCB 进程的组成——程序段、数据段 知识滚雪球:程序是如何运行的? 进程的组成 进程的特征 知识回顾与重要考点 二、进程的状态与转换 进程的状态——创建态、就绪态 进程的状态——运行态 进程的…

刷题日记【第十二篇】-笔试必刷题【洗牌+MP3光标位置+年终奖+迷宫问题】

洗牌【编程题】 import java.util.*;public class Main {// 左: i --> 2*i;// 右: in --> 2*i 1;private static void playCard(int[] cards, int n, int k ) {for (int i 0; i < k; i) {//一次洗牌的顺序int[] newCards new int[cards.length];//遍历编号为0-n-1…

【Servlet】2:认识一下Web服务器——Tomcat

目录 第三章 | Tomcat 认识与配置 | 章节概述 | HTTP服务器概述 | Tomcat 安装与配置 | Tomcat 的目录结构、端口号 第四章 | Tomcat 基本使用 | 章节概述 | 本地Tomcat 静态资源网站访问 | IDEATomcat 静态资源网站访问 | IDEA中最基础web项目的目录结构 本文章属于后…

从零开始操作系统-07:APIC

这一节主要主要是APIC。 所需要的文件在Github&#xff1a;https://github.com/yongkangluo/Ubuntu20.04OS/tree/main/Files/Lec7-ExternalInterrupt 历史方法&#xff1a;PIC&#xff08;Programmable Interrupt Controller&#xff09; Intel 8259&#xff1a; APIC&#…

小侃设计模式(十三)-策略模式

1.概述 策略模式&#xff08;Strategy Pattern&#xff09;是一种比较简单的模式&#xff0c;它定义了算法家族&#xff0c;分别封装起来&#xff0c;让它们之间可以互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响到使用算法的客户。策略模式具有较强的实用性&a…

ARM学习扫盲篇(一):CPSRSPSR、LcacheDcache、w/parityw/ECC

1、CPSR&SPSR CPSR—程序状态寄存器(current program status register) SPSR—程序状态保存寄存器&#xff08;saved program status register&#xff09; Icache&Dcache icache用来缓存指令&#xff1b; dcache用来缓存数据&#xff0c;dcache用的前提是mmu要启动…

(续)SSM整合之SSM整合笔记(ContextLoaderListener)(P177-178)

目录 ContextLoaderListener 一 ContextLoaderListener 二 测试ContextLoaderListener 1 新建模块spring_listener com.atguigu 2. 导入依赖 3 .转web 4 .web.xml 5 springmvc.xml 6 .spring.xml 7 首页index.html 8 控制层 HelloController 9 service接口…

【24计算机考研】备考前必须了解的避坑小知识,建议收藏

前言 我们可能已经了解到最近两三年的考研趋势&#xff0c;疫情的原因&#xff0c;不断增加的二战三战考生&#xff0c;导致每年考研人数持续增长&#xff0c;那么&#xff0c;如何在相同的时间里&#xff0c;赶超你的竞争对手&#xff0c;避坑 绝对是很重要的。 考研将是一场…

【Spring】——9、如何指定初始化和销毁的方法?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(3)使用DMA

上一篇&#xff1a; (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(2) 上一篇完成了ST7735驱动的移植&#xff0c;并已经可以通过SPI在屏幕上显示字符了&#xff0c;这一章会把SPI修改为DMA的传输方式。由于RTT对于STM32H7的SPI的DMA传输方式目前支持的并不好&#xff0c;这…

Vuex3使用教程(待续)

Vuex定义 以下是Vue官网对于Vuex的定义&#xff1a; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 从官方定义上看&#xff1a; Vuex提供了一个全部组件…

Java注释:单行、多行和文档注释

注释是对程序语言的说明&#xff0c;有助于开发者和用户之间的交流&#xff0c;方便理解程序。注释不是编程语句&#xff0c;因此被编译器忽略。 Java入门基础视频教程&#xff0c;java零基础自学就选黑马程序员Java入门教程&#xff08;含Java项目和Java真题&#xff09; Ja…

【Django】Django4.1.2使用xadmin避坑指南(二)

上一篇【Django】Django4.1.2使用xadmin避坑指南调完后&#xff0c;还是继续有问题&#xff0c;没事&#xff0c;咱们继续&#xff0c;必须啃下硬骨头~ 文章目录环境问题一&#xff1a;if not ContentType._meta.installed:这一句报错&#xff1a;AttributeError: Options obje…

《深度学习进阶 自然语言处理》第八章:Attention介绍

文章目录8.1 Attention结构8.1.1 seq2seq存在的问题8.1.2 编码器的改进8.1.3 解码器的改进8.2 Attention的应用8.3 总结之前文章链接&#xff1a; 开篇介绍&#xff1a;《深度学习进阶 自然语言处理》书籍介绍 第一章&#xff1a;《深度学习进阶 自然语言处理》第一章&#xf…

SSH连接WSL2踩坑记录与增加端口转换规则,实现外网与WSL2的连接

SSH连接WSL2踩坑记录 文章目录SSH连接WSL2踩坑记录1. 在WSL里的操作2. ssh连接3. 可能出现的错误4. 再配置端口转发到WSL1. 在WSL里的操作 1.1 重装openssh-server sudo remove openssh-server # 如果已经安装了&#xff0c;建设先卸载 sudo apt install openssh-server…

Ansys Lumerical | 行波 Mach-Zehnder 调制器仿真分析

前言 本示例描述了行波 Mach-Zehnder 调制器的完整多物理场&#xff08;电气、光学、射频&#xff09;仿真&#xff0c;最后在INTERCONNECT中进行了紧凑模型电路仿真。计算了相对相移、光学传输、传输线带宽和眼图等关键结果。 综述 此示例中5毫米长的Si波导由5毫米长的Al共面…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.24 SpringBoot 整合 RabbitMQ(topic 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.24 SpringBoot 整合 RabbitMQ(topic 模式)5.24.1 …

FL Studio2023水果编曲软件最新版安装教程

FL Studio中文版是知名的音乐制作软件&#xff0c;让你的计算机就像是全功能的录音室&#xff0c;软件包含13种虚拟音源&#xff0c;可同时录制64轨音频轨&#xff0c;FL Studio中文版拥有的漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制&a…

智能化油田建设规划

一、数字化油田-技术现状 数字化油田实现了设备的远程生产过程监控&#xff0c;使井场实现无人值守。所以目前的设备运行维护管理系统只能实现数据统计管理&#xff0c;并不能实现设备状态监控及远程维护及故障诊断。 1、数字化油田— 存在的问题 缺少设备状态在线监测系统&a…

第三章. 业务功能开发--用户登录安全退出

第三章. 业务功能开发--用户登录安全退出 1. 用户登录 需求&#xff1a; 用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.*用户名和密码不能为空*用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功*登录成功之后,所…