Git原理学习记录

Git原理学习记录

1.git init git-test

image-20210127081614729

git init 实际上就是在特定的目录下创建对应的目录和文件

2.object

$ echo "V1" > file.txt
$ git hash-object -w file.txt
998a6f80eb9feed5d5a7b2b56c41e91961807a52 
//将file.txt的内容以一个object的形式添加进object数据库中,该hash值对应着这个object

$ find .git/objects/ -type f #type用于制定类型,f表示文件
.git/objects/99/8a6f80eb9feed5d5a7b2b56c41e91961807a52
在object 下多出一个99文件夹,git以Hash前两个字符作为目录名,后38作为文件名,存在object数据库中。
$ git cat-file -p 998a
V1
$ git cat-file -t 998a
blob
#blob是一种存放二进制文件的容器,是数据库中用来存储二进制文件的字段类型


#更新文件
$ cat "v2" > file.txt
$ git hash-object -w file.txt
beef424daef9c4eeedd52f6b12d46ee7e0fcf1da
$ find .git/objects -type f

image-20210127085040475

#恢复版本

image-20210127085232169

可以看出,Git的版本控制就是将每个版本文件都保存到一个object数据库中,如果想要恢复上个版本,git cat-file -p 998a > file.txt即可恢复。

#注意
1.为什么不直接cat查看数据库内容,而是编写git cat-file
   因为git不能将文件内容直接保存进object,而是进行了压缩,所以无法直接查看.
2.一个object的存储内容:

image-20210127085802709

git cat-file刚好相反,先把object文件中存放的数据用zlib进行解压,根据空格和空字节对解压后的数据进行划分,根据参数-t或-p返回object的内容或类型

转载请标明,谢谢
原文地址:https://www.cnblogs.com/guapilsh/p/14439941.html