参考文档
https://git-scm.com/book/en/v2/Git-Internals-Packfiles
概要
默认情况下,blob
文件存储在.git/objects/CommitID[0:2]/CommitID[2:]
下,但是当运行git gc
,git push
推送到远程分支时,或其他情况下,git
会自动将文件打包。
在概念上,blob
文件称为loose
的,packfile
则将多个类似的文件聚集在一起,只存储delta来优化空间占用。
git verify-pack -v .git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.idx
2431da676938450a4d72e260db3bf7b0f587bbc1 commit 223 155 12
3c4e9cd789d88d8d89c1073707c3585e41b0e614 tree 8 19 1331 1 deef2e1b793907545e50a2ea2ddb5ba6c58c4506
b042a60ef7dff760008df33cee372b945b6e884e blob 22054 5799 1463
033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 blob 9 20 7262 1 b042a60ef7dff760008df33cee372b945b6e884e
1f7a7a472abf3dd9643fd615f6da379c4acb3e3a blob 10 19 7282
non delta: 15 objects
chain length = 1: 3 objects
.git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.pack: ok
上面的例子显示, 033b
引用b042a
文件。越早的版本越以delta
的形式存储,最新的版本则是完整的文件,因为最可能被访问的文件是最近的版本。
相关命令
index-pack Build pack index file for an existing packed archive
multi-pack-index Write and verify multi-pack-indexes
pack-objects Create a packed archive of objects
prune-packed Remove extra objects that are already in pack files
unpack-objects Unpack objects from a packed archive
pack-redundant Find redundant pack files
show-index Show packed archive index
unpack-file Creates a temporary file with a blob's contents
verify-pack Validate packed Git archive files