Git垃圾收集似乎没有完全奏效

Jee*_*eef 18 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-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
Run Code Online (Sandbox Code Playgroud)

这对我来说意味着我的回购中有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)
Run Code Online (Sandbox Code Playgroud)

当我再次运行计数对象时,我仍然具有相同的输出

    size-garbage: 41.20 MiB
Run Code Online (Sandbox Code Playgroud)

我只是手动删除垃圾文件?至少有一个是非常丰满的.

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
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 21

C:\Users\VonC\prog\git\git>git log -Ssize-garbage|more
Run Code Online (Sandbox Code Playgroud)

这个节目size-garbage输出已经由NguyễnTháiNgọcDuy()提交给lait 1.8.3(2013年5月)提交1a20dd4pclouds

size-garbage:垃圾文件占用的磁盘空间,以KiB为单位

count-objects:报告垃圾文件占用的磁盘空间

同时在松散的垃圾上发出警告而不是因使用report_garbage()函数而导致的错误count_objects()

这个垃圾清洁提示部分提到:

要将repo大小降低到最低限度,您需要以下两个命令(两个命令本身都不能完成整个作业).
另请注意" a"上的小写" " repack,表示您要盲目丢弃无法访问的对象,而不是将它们保留为松散的对象.

git repack -adf     # kills in-pack garbage
git prune           # kills loose garbage
Run Code Online (Sandbox Code Playgroud)

所以git count-objects -v -H在应用这两个命令之后再试一次.


查看git repack手册页,jthill 在评论中添加:

我更喜欢大A选项:

"相同-a,除非-d使用.
然后前一个包装中的任何无法到达的物体变成松散的,未包装的物体,而不是留在旧包装中."

Linus Torvalds的认为,-fgc--aggressive是很多过度使用- 以至于他建议唬弄它的文档.
(2007年)
(-f用于--no-reuse-delta)

这意味着更有效的组合可能是:

git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage
Run Code Online (Sandbox Code Playgroud)