您的位置:首页 > 理论基础 > 数据结构算法

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

2015-08-12 15:04 429 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: