深入理解Git (六) - 松散对象

Git在存储数据的时候,存储的都是完整的对象,并不是差异,叫做松散对象Loose Object,有时候你只改变了一点,但是同时会拥有近乎两倍大小的blob对象。


这样子做岂不是很不节省磁盘?所以Git会在每次push到远程的时候进行garbage collect操作,当然我们也可以自己手动改进行gc,如:

git gc

Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 0 (delta 0)


然后查看一下.git/objects下有哪些文件:

find .git/objects -type f

发现多了一些pack文件:

.git/objects/info/packs
.git/objects/pack/pack-abcde.idx
.git/objects/pack/pack-abcde.pack

当然也还有可能还有一些dangling的对象,这些对象是没有被其它引用的对象,git不会对其进行pack。.pack文件存储了所有删除的对象, .idx文件是索引文件,存储相应的偏移信息。


我们可以使用verify-pack命令显示pack的信息:

git verify-pack -v .git/objects/pack/pack-abcde.idx

a35a7ea3f7b55be91743c708d150b573116515ec commit 239 160 12
fb1c75a143de21f30004dab829b39f99d225d292 commit 187 128 172
ca2b7d42454d33b31cfc810592e8bd47f811decd tree   70 76 300
fd5d73ef7deb282cbf47826c58448597f24453ba blob   18 28 376
56166dc42a6a2f694e088694a2a2c90606e28f2d blob   16 23 404
4e1ba2916b4b903d2e5a2209cdcca7129a891c2f tree   36 46 427
non delta: 6 objects
objects/pack/pack-83c7f603b25c063accec33ee8869a6afb1e9fd0a.pack: ok


第一列显示对象的指针,即Hash值,第二列展示是什么类型的对象,第三列展示占用了多少字节。


原文:http://blog.csdn.net/hongchangfirst/article/details/45339229

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst



你可能感兴趣的:(开源项目(Open,Source))