1、基于版本快照的数据存储
Git将其所管理的数据视为一个微型文件系统的一组快照,它保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。每次提交或在Git中保存项目的状态时,Git基本上会抓取一张所有文件当前状态的快照,然后存储一个指向该快照的引用。出于效率的考虑,如果文件并没有发生变动,Git则不会再重新保存文件,而只是留下一个指向先前已保存过的相同文件的链接。Git更多的是将数据作为一个快照流。
2、如何理解提交对象、快照、HEAD、分支等概念及其之间的关系?
名词 | 概念 |
---|---|
提交对象 | 包含指向某次提交所产生的树对象(记录着项目的目录结构和 blob 对象(保存着文件快照)索引)的指针和所有提交信息 |
快照 | 可以简单理解为:项目在某个版本时的备份 |
分支 | 指向提交对象的可变指针 |
HEAD | 指向当前所在的本地分支的指针 |
3、三棵树模型
这里所谓的“树”实际上指的是”文件的集合“,并非特定的数据结构。作为一个系统,Git借助一般操作来管理及操作这三棵树,如下表所示:
树 | 用途 |
---|---|
HEAD | 最近提交的快照,下次提交的父提交 |
索引区 | 预计的下一次提交的快照 |
工作目录 | 沙盒 |
三个课树之间的关系