Git垃圾收集似乎没有完全起作用

Git垃圾收集似乎没有完全起作用,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

我有点困惑如何彻底清理我的垃圾

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-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