git 内部原理

git 对象

.git / objects 目录下存放git对象,每种对象都有40位的SHA1值作为唯一标识

SHA1前两位作为文件夹名,后38位作为文件名

 

blob对象,映射到一个文件,对象内容就是文件内容

 

tree对象,映射到一个目录,对象内容为本目录下的文件的SHA1值和子目录的SHA1

 

commit对象,对象内容为本次commitSHA1值、父commitSHA1

和一个指向顶层tree对象的SHA1

 

git cat-file -t SHA1    查看对象类型

git cat-file -p SHA1   查看对象内容

 

各种分支名、标签等都指向commit对象

暂存区

.git / index 文件  暂存区

引用

.git / refs / heads 存放用本地分支名命名的文件masterdevelop等,

内容为该分支最新commitSHA1

.git / refs / remotes 存放用远程分支名命名的文件   

.git/refs/remotes/origin存放origin这个远程库下的分支

.git / refs / tags 存放用tag名命名的文件

.git / HEAD 文件是HEAD指针,内容是.git/refs下某个文件路径名

 

git rev-parse 显示引用对应的commitID      

git rev-parse master      git rev-parse refs/heads/master      git rev-parse HEAD

.git / logs / refs 存放用分支名命名的文件,内容是该分支的变迁历史,和父commitID无关

reflog查看的就是这个文件的内容

 

posted @ 2020-05-26 18:40  是的哟  阅读(128)  评论(0编辑  收藏  举报