git 内部原理
git 对象
.git / objects 目录下存放git对象,每种对象都有40位的SHA1值作为唯一标识
SHA1前两位作为文件夹名,后38位作为文件名
blob对象,映射到一个文件,对象内容就是文件内容
tree对象,映射到一个目录,对象内容为本目录下的文件的SHA1值和子目录的SHA1值
commit对象,对象内容为本次commit的SHA1值、父commit的SHA1值
和一个指向顶层tree对象的SHA1值
git cat-file -t SHA1 查看对象类型
git cat-file -p SHA1 查看对象内容
各种分支名、标签等都指向commit对象
暂存区
.git / index 文件 暂存区
引用
.git / refs / heads 存放用本地分支名命名的文件master、develop等,
内容为该分支最新commit的SHA1值
.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查看的就是这个文件的内容