.git目录结构和数据保存形式

这是看《Pro Git》底层原理的一点笔记。

Git目录


git init Test
命令创建一个空的Git仓库,会自动生成一个.git隐藏文件夹。

.git目录结构和数据保存形式_第1张图片

树形结构是这样的


.git目录结构和数据保存形式_第2张图片

.git里面包含HEAD,config,description和branches、hooks、info、objects、refs五个文件夹。

其中config是项目特有的Git配置文件,description但是GitWeb专用的文件。info文件夹是全局性排除文件,它和.gitignore是互补的。里面就一个exclude文件。


.git目录结构和数据保存形式_第3张图片

hooks存放一些钩子脚本。
HEAD记录当前被checkout的分支。
objects存放所有数据。
refs 提交对象的指针。

这个文件结构是git初始化的样子,其实还会有别的文件,例如有个相当重要的index。它记录的是暂存区的信息。就被已经git add的内容。

Git对象

然后所有git数据都保存在objects目录下,以对象的形式保存。可以通过git hash-object命令来创建git数据对象。
其中w参数是保存下来,否则只返回一个SHA-1校验和,并不会真的创建一个文件。
stdin参数是从标准输入流读取内容,没有这个参数则需要另外指定内容来源。例如像
git hash-object -w test.txt
就没有stdin参数,就需要另外指定从text.txt读取内容。

git根据数据对象的内容计算出40位的SHA-1,前两位作为子目录吗,后38位作为文件名。
可以使用cat-file命令查看对象的内容和对象的类型。


.git目录结构和数据保存形式_第4张图片

你可能感兴趣的:(.git目录结构和数据保存形式)