By francis_hao    Nov 27,2016

 

参考【1】的一张图已经把git的基本原理描述的很清楚了,如下:

git使用笔记(九)操作原理-LMLPHP

 

下面以实例演示其过程,需要用到两个命令cat-file和ls-files,可见参考【2】和参考【3】

1、新建一个文件名为name,内容为content的文件。

 

2、添加文件到暂存区,此时objects文件夹中已经有对应的文件了

git使用笔记(九)操作原理-LMLPHP

git使用笔记(九)操作原理-LMLPHP

 

3、commit,此时objects文件夹有三个文件,其中的两个文件是因为commit命令增加的。三个文件的类型分别是commit、tree和blob。

git使用笔记(九)操作原理-LMLPHP

 

4、查看日志,得到commit的哈希值,并查看其内容,可以看到内容中包含了一个tree类型的哈希值。

git使用笔记(九)操作原理-LMLPHP

 

5、查看这个tree类型的文件,看到其包含了一个blob类型的文件,并且其真实的文件名为name,就是我们提交的文件。

git使用笔记(九)操作原理-LMLPHP

 

6、查看blob类型文件的内容。三种文件的关系是commit->tree->blob,blob文件就是经过处理的name文件。知道了commit类型的文件,那么这次提交的相关文件就全知道了

git使用笔记(九)操作原理-LMLPHP

 

7、最后,log日志是存放在哪里,也就是由哪里索引到commit类型的文件的呢?

git使用笔记(九)操作原理-LMLPHP

这个文件的第一项是上一次提交的哈希值,这里因为是第一次提交所以就是全0了。

 

 

git使用笔记(九)操作原理-LMLPHP
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/

 

 

参考

【1】蒋鑫.《git权威指南》北京:机械工业出版社,2011.6

【2】博客园 http://www.cnblogs.com/yinghao1991/p/8594962.html git使用笔记(十三)ls-files

【3】博客园 http://www.cnblogs.com/yinghao1991/p/8595468.html git使用笔记(十四)cat-file

 

 

05-23 07:34