文章目录
Git 是一套内容寻址文件系统。什么意思呢?
就是Git的核心部分是一个简单的键值数据库(key-value data store)。你可以向该数据库插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。
(一)Git对象的存放目录
Git中对象都保存在本地版本库的.git/objects
目录(即:对象数据库)中。
首先初使化一个赶紧的Git仓库:
# 创建一个本地的git仓库git_learning
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository
$ mkdir git_learning
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository
$ cd git_learning/
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git_learning
$ git init
Initialized empty Git repository in J:/git-repository/git_learning/.git/
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git_learning (master)
$ ll -a
total 8
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ./
drwxr-xr-x 1 L 197121 0 4月 10 20:23 ../
drwxr-xr-x 1 L 197121 0 4月 10 20:24 .git/
确认 objects
目录是默认初始状态:
# 查看.git/objects/目录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git_learning (master)
$ ll -a .git/objects/
total 4
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ./
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ../
drwxr-xr-x 1 L 197121 0 4月 10 20:24 info/
drwxr-xr-x 1 L 197121 0 4月 10 20:24 pack/
# 查看info目录和pack目录中的内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git_learning (master)
$ ll -a .git/objects/info/
total 0
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ./
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ../
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git_learning (master)
$ ll -a .git/objects/pack/
total 0
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ./
drwxr-xr-x 1 L 197121 0 4月 10 20:24 ../
从上可以看到Git初始化一个本地版本库的时候,就已经初始化了objects
目录,并在其中创建了pack
和info
子目录,但是没有其他常规文件,pack
和info
子目录中也没有文件。我们只关注objects
目录下除了info
和pack
目录之外的变化。
(二)Git中对象类型
Git中对象类型有四种:blob(块)
对象,tree(目录树)
对象,commit(提交)
对象和tag(标签)
对象,这四种原子对象构成了Git高层数据结构的基础。
(三)blob对象
1、blob对象说明
(1)blob对象定义
blob
对象有叫数据对象。
blob
对象是用来存储文本内容的。即把一个文本文件的内容,作为一个blob
对象存储在Git系统中。
翻译:
- Git中
blob
对象就是对应文件系统中的文件,确切的说是文件的内容,包含
键:一个hash值和校验值的组合,
值:文件的内容。 - 比较特殊的是:
blob
对象只存内容,不存文件名,文件名在tree
对象中保存。
blob
对象存储方式如下图: