By francis_hao Nov 27,2016
参考【1】的一张图已经把git的基本原理描述的很清楚了,如下:
下面以实例演示其过程,需要用到两个命令cat-file和ls-files,可见参考【2】和参考【3】。
1、新建一个文件名为name,内容为content的文件。
2、添加文件到暂存区,此时objects文件夹中已经有对应的文件了
3、commit,此时objects文件夹有三个文件,其中的两个文件是因为commit命令增加的。三个文件的类型分别是commit、tree和blob。
4、查看日志,得到commit的哈希值,并查看其内容,可以看到内容中包含了一个tree类型的哈希值。
5、查看这个tree类型的文件,看到其包含了一个blob类型的文件,并且其真实的文件名为name,就是我们提交的文件。
6、查看blob类型文件的内容。三种文件的关系是commit->tree->blob,blob文件就是经过处理的name文件。知道了commit类型的文件,那么这次提交的相关文件就全知道了
7、最后,log日志是存放在哪里,也就是由哪里索引到commit类型的文件的呢?
这个文件的第一项是上一次提交的哈希值,这里因为是第一次提交所以就是全0了。
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 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