认识 Git 底层存储机制

众所周知,Git 是一个非常强大的版本控制系统,要想支撑其运转,底层的存储结构是非常重要的。
当我们使用 git init 新建一个 Git 仓库时,会自动新建一个 .git 目录。
认识 Git 底层存储机制_第1张图片
进入 .git 目录中,看看里面有什么
认识 Git 底层存储机制_第2张图片

1. COMMIT_EDITMSG 文件

COMMIT_EDITMSG 是每次提交时,写的提交说明,只会保存最后一次写的。

2. config 文件

config 是这个项目的 git 配置
我们可以使用 git config 命令来为 git 项目添加配置,如添加提交时的用户名和邮箱。
其中 git config 有三个指定参数范围的参数
– global 参数是为所有git项目设置参数,这个是环境变量级别的,这个比较常用

git config --global --add user.name git_username

– system 是为这台电脑的所有用户设置,这个不常用

git config --global --add user.name git_username

–local 是单独为当前的 git 项目设置

git config --local --add user.name git_username

当我们使用 git config 命令来设置参数时,就会保存到 .git/config 文件中

3. HEAD 文件

指示当前 HEAD 指向的分支
下面显示我当前是指向 master 分支的
在这里插入图片描述

4. hooks

hooks

5. 最重要的 objects

git 中是根据内容是否一致来判断是否是同一个文件的,即使是有两个文件名不同内容相同的文件,git 也会只存储一份。
下面我们可以实际操作来感受一下。
先使用 git init 来初始化一个项目,并且创建一个commit,看看 objects 发生了什么改变
初始项目后: info 和 pack 文件夹都没有内容
认识 Git 底层存储机制_第3张图片
当我们创建一个文件,并使用 git add . 提交到暂存区之后,可以发现多了两个文件

认识 Git 底层存储机制_第4张图片
我们可以使用 git cat-file 命令来查看对象的类型和实际内容
git cat-file -t 2d832d9044c698081e59c322d5a2a459da546469
注意后面这一串是文件夹名字+文件夹下的内容组成的
可以看到,我们使用 git add . 之后,新增了一个 tree 和 blob 对象
在这里插入图片描述
在这里插入图片描述

其中 tree 为根节点,blob 为我们创建的那个文件

然后我们创建一个commit

可以看到现在有
一个 commit ,为我们的提交
一个 blob, 为我们创建的文件
一个 tree,为根节点的 tree
一个 tree,包含了blob 的 tree

这三种文件 commit blob tree 就是 git 主要的三种文件了。

你可能感兴趣的:(Git,git)