Git 是一套内容寻址 (content-addressable) 文件系统git
这部分命令通常被称做“底层(plumbing)”命令,而那些更友好的命令则被称做“高层(porcelain)”命令。数据库
目录结构spa
目录功能:指针
objects
目录存储全部数据内容;refs
目录存储指向数据(分支)的提交对象的指针;HEAD
文件指示目前被检出的分支;index
文件保存暂存区信息code
Git 的核心部分是一个简单的键值对数据库(key-value data store)。对象
主要的 Git 对象——数据对象、树对象、提交对象(“blob”“tree” “commit” )——最初均以单独文件的形式保存在 .git/objects
目录下it
Git 会将上述头部信息和原始数据拼接起来,并计算出这条新内容的 SHA-1 校验和。Git 会经过 zlib 压缩这条新内容。object
sha1计算:im
sha1sum "blob #{content.length}\0content"
SHA-1 值的前两个字符做为子目录名称,后 38 个字符则做为子目录内文件的名称数据
https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E5%92%8C%E9%AB%98%E5%B1%82%E5%91%BD%E4%BB%A4