本文介绍git压缩的两个方面: zlib和pakfile
zlib
source file => zlib => blob object
mkdir test && cd test
git init
find .git/objects
# .git/objects
# .git/objects/pack
# .git/objects/info
find .git/objects -type f
wget https://cdn.bootcss.com/jquery/3.4.1/jquery.js
ls -hl jquery.js
# 274K
git add . && git commit -m "first commit"
find .git/objects -type f
# .git/objects/ad/e052abd8d102a520f0556c9940d553beff74e4
# .git/objects/77/3ad95c56f8321eb4901736930024ec517a948a
# .git/objects/1e/cb763188651ad1bdfa69a7b07b18d5d50f8dcc
# commit ade052 => tree 1ecb76 => blob 773ad9
du -sh .git/objects
# 108K
ls -hl .git/objects/77/3ad95c56f8321eb4901736930024ec517a948a
# 99K
关于git使用zlib的详细过程 可以参考对象存储
pakfile
objects => git gc => pakfile
echo "new line" >> jquery.js
ls -hl jquery.js
# 274K
git add . && git commit -m "second commit"
find .git/objects -type f
# .git/objects/ad/e052abd8d102a520f0556c9940d553beff74e4
# .git/objects/a2/dd10d57339ce9976e11900da0ef570d0c2df94
# .git/objects/e3/db19547ed6af0b4ccc262271561d888efaa2d2
# .git/objects/d3/2ee70ff591e4c06865c2bc12262477116b5130
# .git/objects/77/3ad95c56f8321eb4901736930024ec517a948a
# .git/objects/1e/cb763188651ad1bdfa69a7b07b18d5d50f8dcc
# commit ade052 => tree 1ecb76 => blob 773ad9
# commit d32ee7 parent ade052 => tree e3db19 => blob a2dd10
du -sh .git/objects
# 216K
ls -hl .git/objects/a2/dd10d57339ce9976e11900da0ef570d0c2df94
# 99K
git gc
find .git/objects -type f
# .git/objects/pack/pack-aaffacaa940f2f2a67b6e1ed5e3edccd104d9c05.idx
# .git/objects/pack/pack-aaffacaa940f2f2a67b6e1ed5e3edccd104d9c05.pack
# .git/objects/info/packs
du -sh .git/objects
# 92K
git verify-pack -v .git/objects/pack/pack-aaffacaa940f2f2a67b6e1ed5e3edccd104d9c05.idx
# d32ee70ff591e4c06865c2bc12262477116b5130 commit 222 155 12
# ade052abd8d102a520f0556c9940d553beff74e4 commit 173 124 167
# a2dd10d57339ce9976e11900da0ef570d0c2df94 blob 280373 83305 291
# e3db19547ed6af0b4ccc262271561d888efaa2d2 tree 37 48 83596
# 1ecb763188651ad1bdfa69a7b07b18d5d50f8dcc tree 37 48 83644
# 773ad95c56f8321eb4901736930024ec517a948a blob 17 30 83692 1 a2dd10d57339ce9976e11900da0ef570d0c2df94
# non delta: 5 objects
# chain length = 1: 1 object
# .git/objects/pack/pack-aaffacaa940f2f2a67b6e1ed5e3edccd104d9c05.pack: ok
通过只保存增量变化来减小pakfile文件的大小