深入理解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
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
相关文章推荐
- 数据结构实验之队列一:排队买饭
- 数据结构基本概念
- 数据结构复习1
- 数据结构-链式线性表(学习笔记)
- 数据结构(二叉搜索树)
- Redis底层数据结构总结
- Manacher算法求回文半径
- 数据结构基础温故-7.排序
- 数据结构之---C语言实现最小生成树之prim(普里姆)算法
- AA树,2-3树二叉化
- 图算法之拓扑排序
- HDU-2647-邻接表模板
- 面试复习重点——数据结构、操作系统、计算机网络、数据库。
- 2015.08.10总结
- 【暑假】[实用数据结构]UVAlive 3026 Period
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表六:有序链表的建立
- 数据结构(Java语言)——LinkedList简单实现
- 数据结构实验之链表五:单链表的拆分
- 【暑假】[实用数据结构]UVAlive 3942 Remember the Word