yuanzhixiang's blog

yuanzhixiang

Git .git/objects 文件格式

524
2021-09-27

例如提交一份名为 content.md 的文件,文件内的内容如下

body1
body2

使用下面的命令提交

$> git add .
$> git commit -m "commit message1"

提交之后在 objects 文件夹下会产生三份文件

$> find .git/objects -type f
.git/objects/66/e859004701cf99bfa13667be837368870001c6
.git/objects/02/b52819578ba1c1e3c232ed3fc69422505a9955
.git/objects/a6/4f3d0b5b4a5fb731c6e0aef1e018e4a1b169e4

我们可以通过命令查看三份文件的内容

$> git cat-file -p 66e859004701cf99bfa13667be837368870001c6
tree a64f3d0b5b4a5fb731c6e0aef1e018e4a1b169e4
author zhixiangyuan <xxx@gmail.com> 1632754829 +0800
committer zhixiangyuan <xxx@gmail.com> 1632754829 +0800

commit message1
(base)

$> git cat-file -p 02b52819578ba1c1e3c232ed3fc69422505a9955
body1
body2%
(base)

$> git cat-file -p a64f3d0b5b4a5fb731c6e0aef1e018e4a1b169e4
100644 blob 02b52819578ba1c1e3c232ed3fc69422505a9955	content.md
(base)

可以看到第一份文件中存储的是文件的提交信息,其中 true 后面的 hash 值表示的是该次修改的文件的地址,通过命令查看 a64f3d0b5b4a5fb731c6e0aef1e018e4a1b169e4 可以看到该文件中存储的是改次修改的文件的相关信息,其中存储的另一条 hash 值是对应修改文件的具体信息