git学习笔记-(4-git对象)

一,git对象

Git 的核心部分是一个简单的键值对数据库。你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。

向数据库写入内容 并返回对应键值

命令:
echo ‘test content’ | git hash-object -w --stdin

  • -w 选项指示 hash- - object 存储数据对象;若不指定此选项,则该命令仅返回对应的键值,而不会存储数据对像。
  • - -stdin ( standard input ) 选项则指示该命令从标准输入读取内容;若不指定此选项 ,则须在命令尾部给出待存储文件的路径 。
  • git hash- object -w 文件路径: 存文件
  • git hash-object 文件路径
    返回对应文本的键值d670460b4b4aece5915caf5c68d12f560a9fe3e4
  • 返回:
    该命令输出一个长度为 40 个字符的校验和。 这是一个 SHA-1哈希值。

例一:
git学习笔记-(4-git对象)
这里输出的d670460b4b4aece5915caf5c68d12f560a9fe3e4就是内容“test content”对应哈希值(内容对应的唯一标识)。
整个数据库,他会根据你的内容不一样,给你生成不一样的哈希值。
此时,因为没有家-w,所以内容并没有存入数据库:
git学习笔记-(4-git对象)
git学习笔记-(4-git对象)
此时则写入数据库了:
git学习笔记-(4-git对象)
git学习笔记-(4-git对象)
可以看到,已经写入数据库了。
git学习笔记-(4-git对象)
利用cat命令查看写入的内容,却发现是乱码,这是因为写入的东西是经过压缩的,想要读取,还得借助其他命令行:
git学习笔记-(4-git对象)
这样就读取出来了!
于是git对象实际上是key:value组成的键值对(key是hash对应的hash),而且键值对在git内部是一个blob类型。

二, 查看 Git 如何存储数据

命令:
find ./.git/objects - -type f
返回:
./.git/objects/d6/70460b4b4aece5915caf5c68 d12f560a9fe3e4
这就是开始时 Git 存储内容的方式 : 一个文件对应一条内容 。前面两个字符用于命名子目录,余下的 38 个字符则用作文件名。
根据键值拉取数据
命令
git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4
-p 选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容。
返回
对应文件的内容

三,还可以对一个文件进行简单的版本控制

git学习笔记-(4-git对象)
git学习笔记-(4-git对象)
git学习笔记-(4-git对象)
git学习笔记-(4-git对象)