通过前面的学习知道“GIT之所以能够作为版本控制系统,是因为GIT会把对文件的每次修改结果作为一个对象保存起来”,这样是否会造成空间的浪费?
答案是肯定的。
那么GIT系统如何处理这种浪费?
GIT在特定情况下,如本地推送远程仓库、手动git gc时会将磁盘上的对象打包至一个叫packfile的二进制文件以节省空间并提高效率;本地磁盘上的对象存在诸多类似的对象,大小相近,文件名相近。
为了使实例效果更明显,首先加入一个大文件repo.rb:
$ git add repo.rb
$ git commit -m 'modified repo.rb'
[slave 3523b0c] modified repo.rb
1 file changed, 1 insertion(+), 1 deletion(-)
注意:repo.rb是随便copy过来的一个文件。
查看slave分支的tree对象:
$ git cat-file -p slave^{
tree}
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
100644 blob cb87f458e7ca139c72cfebac8d713f815777b07d repo.rb
100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
查看repo.rb文件的大小:
$ git cat-file -s cb87f45
22751
表明repo.rb文件大小为22751个字节,即约22kb。
修改文件repo.rb,往文件中添加内容并提交:
$ echo '# testing' >> repo.rb
$ git add repo.rb
$ git commit -m 'modified repo.rb'
[slave 3523b0c] modified repo.rb
1