Git本地仓库内部基本结构

article/2025/6/21 22:10:38

Git本地仓库(本文不涉及远程仓库)的内部结构简单如下图:


这是一个appengine项目,刚从远程仓库中clone出来。这个目录下,除了.git目录外的都算作工作区。.git目录下有很多东西,这里只挑简单的描述。

1.objects目录存放的是实际的文件,当git add命令执行的时候,文件已经被存到了objects目录下。

.git/objects目录下的对象都有一个40位的id,前两位作为目录名,后38位作为文件名

.git/objects$ ls
00  06  0c  12  18  1f  26  2c  32  38  3e  44

这些对象主要是commit对象和tree对象(目录树)

2.index是一个索引文件。存放的是暂存区的整个目录树的信息,并且为目录树中的每个文件都保存了时间戳和长度。

当git add 将某个文件添加到暂存区的时候,index文件中添加了这个文件的基本信息。

当我们修改了工作区的某个文件(比如用touch config.js修改时间戳信息),这会导致该文件的时间戳发生变化,而index里面存放的仍然是旧的信息。

此时当我们执行git status命令来检查版本库的状况:

a. git status就会用config.js的时间戳和长度和index文件里面保存的config.js的时间戳和长度进行比较。

b. 如果相同,则认为没有改变。

c. 如果发现不同。git status会继续用config.js的文件现在的内容和旧版本的config.js(保存在.git/objects中)的内容进行比较。

d. 如果内容没有改变,就简单的将最新的config.js的时间戳信息更新到index文件中

e. 如果内容改变,则提示内容发生改变。但是并不更新index文件中的config.js的时间戳信息。

由于算法优先比较时间戳和长度,避免了当时间戳相同时的文件内容的比较,因此性能比较高。


因此,git add命令会做两件事情:

a.添加文件到暂存区(.git/objects)

b.添加文件索引到(.git/index)


3.当git commit被成功执行后,会产生一系列对象表示该commit的结果,都存储在.git/objects目录下。主要分成三部分:

a.tree对象表示当前commit时候的暂存区的目录树,tree对象的内容来自于.git/index文件。

b.blob对象

tree对象目录树中的文件总是以blob的对象被保存。如果tree中有三个文件,那么就有对应的三个blob对象,它们都能通过tree对象保存的这些blob对象的摘要信息(id,文件名,类型等)找到

c.commit对象

该对象记录了属于哪个tree对象,上一次commit的对象id,自己的id,作者等等。


因此,当git commit操作执行的时候,会:

a. 用.git/index文件保存的目录树创建tree对象,

b. 因此tree对象里面自然就指向了已经被git add添加到.git/objects中的blob文件。

c. .git/refs/heads/master文件保存了这次commit的id


4.HEAD文件保存了当前的branch,比如我的HEAD文件内容:

chenshu@sloop2:~/work/189/appengine/.git$ cat HEAD 
ref: refs/heads/master

也就是说HEAD指向了master分支,如果存在多个分支,HEAD也可指向别的分支。


5. .git/refs 目录称为引用目录

引用就是一个文件,里面包含了一个commit id。.git/refs保存了所有的引用。

.git/refs/heads目录下保存的是分支引用,比如./git/refs/heads/master文件就是master分支的引用。

.git/refs/tags目录保存了tag引用。






http://chatgpt.dhexx.cn/article/Tr9Eyw07.shtml

相关文章

在IDEA中配置git本地仓库并提交远程仓库

首先需要先安装好git 1.下载并安装Git客户端→Git官网下载地址 2.需要有远程仓库账号(gitee或者GitHub都可以)。 先在IDEA中配置git file -> settings -> version control-> git (下边地址填写 git安装的路径中的git.exe的位置) 如果git安装…

如何搭建一个git本地仓库

第一步,右键 第二步,配置邮箱,和git用户名,这个用户名是本地的。可以随意起一个名字 实际上,我们配置的邮箱和用户名,会被记录到本地c盘目录下的一个叫.gitconfig的文件下 我们也可以通过git命令来查看配置…

三、建立Git本地仓库

首先,创建本地仓库文件夹 比如,在D:下新建文件夹,命名为user_project 。 初始化本地仓库 在D:\user_project下运行cmd,如下图 或者右键打开Git Bash 输入初始化仓库的代码,如下 $ git init “该命令将创建一个名为…

Git本地仓库使用

说明:Git是版本控制和协同开发的工具 下载Git 第一步:下载 在官网(https://git-scm.com/download/win),选择自己的版本自行下载 第二步:安装 下载下来后,使用默认设置,不要改动任…

Git本地仓库的初始化和配置

系列文章目录 (一)Git本地仓库的初始化和配置 (二)Git文件代码提交详解 (三)Git分支与标签 (四)Git历史版本的回溯、修改及回滚 (五)Git远端同步 文章目录 系…

Git系列(四)、在IDEA操作Git本地仓库与连接远程Git仓库(推送、合并、拉取、克隆操作)

在IDEA操作Git本地仓库与连接远程Git仓库 1、首先设置idea中绑定本地Git的可执行路径2、随便建个项目,将项目初始化为Git管理的本地仓库3、按命令操作顺序将项目添加并提交到本地仓库中4、修该项目文件,并与历史版本对比5、版本回退6、新建分支7、新建远…

2022新版Git教程 从入门到实战(二)Git本地仓库的使用

🐟 个人主页 :https://blog.csdn.net/qq_52007481⭐个人社区:【小鱼干爱编程】📰最近专栏:Git教程专栏 文章目录 1.Git的本地工作流程2.创建版本库2.1本地仓库2.2 初始化本地仓库2.3 查看本地库状态2.4 将文件添加到暂…

Git本地仓库的搭建及使用

前言 1.什么是git? 开源的最先进的分布式版本控制系统,没有之一用以高效、高速的处理从很小到非常大的项目版本管理。 2.什么是版本控制系统? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 …

git 本地仓库存储位置 / github 本地仓库存储位置 / gitee 本地仓库存储位置

通过在菜鸟教程上学习,了解到 git 关于工作区、缓存区、版本库、本地仓库、远程仓库等概念,即: 工作区:指本地仓库中,除了 .git 目录以外的所有文件和目录;缓存区:.git 目录下的 index 文件&am…

Git 本地仓库(Repository)详解

大纲: 一、前言 二、概述 三、在Windows上安装Git 四、创建本地仓库 五、本地仓库管理详解 六、总结 注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msys…

Git的基本使用(本地仓库)

一、安装Git 可以使用以下地址下载Git,然后默认选项安装即可 Git for Windowshttps://git-for-windows.github.io 安装完成后,在开始菜单找到“Git”->"GIt BAsh" ,说明安装成功 下载完成后,打开进行安装(按照下图…

Python及第三方库pillow\numpy等的安装教程

1、python安装:https://www.cnblogs.com/lvtaohome/p/11121377.html 2、安装第三方库: python成功安装之后: 方法一:管理员下运行windos命令,然后输入pip install 要安装的第三方库名 也有可能会下载到一半出错&am…

numpy简单快速安装教程

numpy安装教程 默认python版本较新版本(有pip功能) step1: numpy下载地址 step2: 我将下载好的numpy放到了D:\python\Scripts中 然后cmd打开 输入 python -m pip install numpy 如图: 安装后有个Warning需要你进行…

NumPy window 安装教程 多图 简单易懂

前言: NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis O…

【冰糖Python】PyTorch安装教程(PyCharm IDE)

当在PyCharm中新建项目后,想要在虚拟环境中安装PyTorch 在Setting中安装总是报错,安装失败 则采用官方建议的命令方式安装即可,点此跳转 可对PyTorch版本、系统版本、CUDA版本进行选择: 选择对应配置后,下方生成对应…

学习笔记——python最详细安装新手教程

目录 1,win10不自带python 2,先去Python官网(https://www.python.org/)上下载你自己想要的版本 2.1,python官网有几个下载文件,有什么区别? 3,双击安装程序,进入下面的…

Python零基础入门教程:Windows/Mac 安装、使用 Python 环境 +jupyter notebook

一、知识点概要 1)搞定Python基础环境安装 2)安装jupyter notebook,最便捷的Python编辑器 3)运营常用Python包介绍和安装 二、开始动手动脑 2.1 搞定Python基础环境安装 2.1.1 下载Python安装包 Mac是自带Python2.7的&#x…

pyhanlp安装教程

小编在安装pyhanlp过程中,费了很多时间,也走了许多弯路。至此,记录一下,以免后面再次安装时浪费时间。以下是安装步骤。 1.安装JDK,版本为:jdk-8u271-windows-x64,安装完之后设置环境变量。环境变量在系统变量下设置,分别添加如下变量: 1.1 JAVA_HOME C:\Program Fil…

lammps教程:moltemplate安装教程

大家好,我是小马老师。 本文介绍ubuntu系统下moltemplate的安装方法。 (1)下载moltemplate软件 下载moltemplate的方法有多种,如git: git clone https://github.com/jewettaij/moltemplate moltemplate 可能部分电脑…

教程:MAC系统Linux服务器下用Anaconda安装Pytorch

目录 连接服务器配置Conda安装Anaconda方法一 手动下载方法二 命令行下载 添加环境变量 安装Pytorch测试 连接服务器 打开mac系统的terminal ssh usernameservername #连接服务器mkdir anaconda #为即将下载的安装包新建一个文件夹配置Conda 安装Anaconda 方法一 手动下载 …