深入理解Git (二) - 内部的数据结构

时间:2022-08-09 19:09:30

Git是来管理数据的,也存储数据,所以可以说也是一个数据库,一个特殊的数据库,不同于RDBMS和NoSQL的数据库,一种索引数据可以快速查找数据变化的数据库。这节我们学习Git的对象存储方式。

Git为了快速查找数据,将数据添加一个header封装为数据对象,然后进行Hash,将此Hash值当作对象名字,以后根据此Hash值变可找到数据。具体的实现方式为:Hash值的前2位是文件的目录名字,后面的值为文件名。由于进行Hash,一旦文件内容改变,其对应的Hahs值就会变化,因而很适合变化的数据。


注意,本篇使用指针这个术语指代对象的Hash值。


Git总共有四类对象:

1 blob对象,就是存真正数据的对象。这种对象的SHA-1 Hash值只跟内容有关,跟文件名,文件模式,Hash时的时间没有关系。

2 tree对象,管理对象的对象,其内容指出包含了哪些子对象,tree对象是递归的。跟blob指针,文件名,文件模式有关,跟Hash时的时间无关。

3 commit对象,Git历史记录对象,里边存储tree对象和父亲commit对象,tree对象可以找到相应的数据,父亲commit对象可以找到历史纪录。跟cache中的tree指针和Hash时的时间有关,如果cache中的内容都一样,不同时间生成的commit对象的Hash值也不同。

4 tag对象,上面三种对象的别名表达方式。由于Git对象对名字是Hash值,所以很不容易记住,所以需要用户自定义一些好记的名字指引别的对象。


原文:http://blog.csdn.net/hongchangfirst/article/details/45332429

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst