Git垃圾收集似乎没有完全起作用
我有点困惑如何彻底清理我的垃圾 git count objects-v-HGit垃圾收集似乎没有完全起作用,git,garbage-collection,Git,Garbage Collection,我有点困惑如何彻底清理我的垃圾 git count objects-v-H warning: garbage found: ./objects/pack/gc_7174754666377259454.idx_tmp warning: garbage found: ./objects/pack/gc_7174754666377259454.pack_tmp warning: garbage found: ./objects/pack/pack-f5b13f50fe2e4d773028c51f547
warning: garbage found: ./objects/pack/gc_7174754666377259454.idx_tmp
warning: garbage found: ./objects/pack/gc_7174754666377259454.pack_tmp
warning: garbage found: ./objects/pack/pack-f5b13f50fe2e4d773028c51f547822e6f2fe720b.bitmap
count: 0
size: 0 bytes
in-pack: 32986
packs: 1
size-pack: 44.14 MiB
prune-packable: 0
garbage: 3
size-garbage: 41.20 MiB
这意味着我的回购协议中有41兆的垃圾
git-gc--prune=now--aggressive
Counting objects: 32986, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (31610/31610), done.
Writing objects: 100% (32986/32986), done.
Total 32986 (delta 23902), reused 9080 (delta 0)
当我再次运行count objects时,我仍然具有与相同的输出
size-garbage: 41.20 MiB
我只是手动删除垃圾文件吗?至少有一个相当丰满
12/02/2014 02:06 PM 0 gc_7174754666377259454.idx_tmp
12/02/2014 02:06 PM 43,195,455 gc_7174754666377259454.pack_tmp
2 File(s) 43,195,455 bytes
0 Dir(s) 502,905,999,360 bytes free
这表明git 1.8.3(2013年5月)中引入了大小垃圾
输出
垃圾大小
:垃圾文件消耗的磁盘空间,单位为KiB
计数对象
:报告垃圾文件占用的磁盘空间
同时,对松散垃圾发出警告,而不是由于以下原因导致的错误:
使用count\u objects()
其中提到:
要将回购规模降低到最小值,您需要以下两个命令(两个命令本身都不能完成整个工作。还要注意“
repack
”上的小写“a
”,它表示您希望盲目地丢弃无法访问的对象,而不是将它们作为松散对象保留
因此,在应用这两个命令后,请重试git count objects-v-H
看了看,他补充道: 我更喜欢大-
A
选项:
“与-a
相同,除非使用了-d
。然后,以前的包中任何无法触及的对象都会变成松散的、未打包的对象,而不是留在旧包中。” Linus Torvalds认为,
-f
像gc
一样的--侵略性的被过度使用了--.
(2007年)
(-f
表示--无重用增量
)
这意味着更有效的组合可能是:
git repack -Ad # kills in-pack garbage
git prune # kills loose garbage
看看你是否在使用git repack-ad时运气更好,我更喜欢大A选项,“与-A相同,除非使用了-d。然后,以前包中任何无法访问的对象都会变成松散的、未打包的对象,而不是留在旧包中。”Linus Torvalds认为,-f
就像gc的--侵略性的
被过度使用了--非常有趣。我不知道那个2007年的帖子。我已将您的评论包含在答案中,以提高可视性。谢谢您的链接,@jthill。这是一本令人难以置信的有趣且有教育意义的书。
git repack -adf # kills in-pack garbage
git prune # kills loose garbage
git repack -Ad # kills in-pack garbage
git prune # kills loose garbage