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