Contents
Object
mkdir test && cd test
git init
find .git/objects
# .git/objects
# .git/objects/pack
# .git/objects/info
find .git/objects -type f
Blob
echo 'version 1' > README
git add .
find .git/objects -type f
# .git/objects/83/baae61804e65cc73a7201a7252750c76066a30
git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30
# verion 1
git cat-file -t 83baae61804e65cc73a7201a7252750c76066a30
# blob
Tree
git commit -m "first commit"
find .git/objects -type f
# .git/objects/54/4b257afc2c066629ab5e285c5ba7bb327e478a
# .git/objects/a8/6c1b95898b43a389ece041cfe720f042c09fbb
# .git/objects/83/baae61804e65cc73a7201a7252750c76066a30
git cat-file -p a86c1b95898b43a389ece041cfe720f042c09fbb
# 100644 blob 83baae61804e65cc73a7201a7252750c76066a30 README
git cat-file -t a86c1b95898b43a389ece041cfe720f042c09fbb
# tree
Commit
git cat-file -p 544b257afc2c066629ab5e285c5ba7bb327e478a
# tree a86c1b95898b43a389ece041cfe720f042c09fbb
# first commit
git cat-file -t 544b257afc2c066629ab5e285c5ba7bb327e478a
# commit
Advanced
echo 'version 2' > file
git add .
find .git/objects -type f
# .git/objects/1f/7a7a472abf3dd9643fd615f6da379c4acb3e3a
git cat-file -p 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
# version 2
git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
# blob
git commit -m "second commit"
find .git/objects -type f
# .git/objects/9c/bbc98014d50d9a7cebc4d367ed75ae0544b857
# .git/objects/1f/7a7a472abf3dd9643fd615f6da379c4acb3e3a
# .git/objects/0f/41c35e19415b1583e4e10351c415bd4bdc9833
git cat-file -p 0f41c35e19415b1583e4e10351c415bd4bdc9833
# 100644 blob 83baae61804e65cc73a7201a7252750c76066a30 README
# 100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a file
git cat-file -t 0f41c35e19415b1583e4e10351c415bd4bdc9833
# tree
git cat-file -p 9cbbc98014d50d9a7cebc4d367ed75ae0544b857
# tree 0f41c35e19415b1583e4e10351c415bd4bdc9833
# parent 544b257afc2c066629ab5e285c5ba7bb327e478a
# second commit
git cat-file -t 9cbbc98014d50d9a7cebc4d367ed75ae0544b857
# commit
Questions
如何彻底删除大文件?
mkdir test && cd test
git init
curl http://dldir1.qq.com/qqfile/QQforMac/QQ_V6.5.5.dmg -o QQ
du -h QQ
# 51M QQ
git add .
git commit -m "first commit"
find .git/objects -type f | xargs du -h
# 4.0K .git/objects/69/7f6120705a2e14b5e3fac3f6bdb59ff266ee54
# 51M .git/objects/43/206cbde7f5ad85eabf7e10c29aab455f51bda4
# 4.0K .git/objects/dc/49067a02fd7ce92b4a0cd85bf8c651b95ed36f
echo 'version 1' > README && rm QQ
git add .
git commit -m "second commit"
find .git/objects -type f | xargs du -h
# 4.0K .git/objects/69/7f6120705a2e14b5e3fac3f6bdb59ff266ee54
# 4.0K .git/objects/56/2b0a9120583228abb7fff895d192eed596658a
# 51M .git/objects/43/206cbde7f5ad85eabf7e10c29aab455f51bda4
# 4.0K .git/objects/dc/49067a02fd7ce92b4a0cd85bf8c651b95ed36f
# 4.0K .git/objects/a8/6c1b95898b43a389ece041cfe720f042c09fbb
# 4.0K .git/objects/83/baae61804e65cc73a7201a7252750c76066a30
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch QQ' --prune-empty --tag-name-filter cat -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now