【问题标题】:Git Garbage collection doesnt seem to fully workGit 垃圾收集似乎无法完全正常工作
【发布时间】:2015-01-31 04:05:43
【问题描述】:

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

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)

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

    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 repack -ad你是否有更好的运气

标签: git garbage-collection


【解决方案1】:
C:\Users\VonC\prog\git\git>git log -Ssize-garbage|more

这表明commit 1a20dd4 为 git 1.8.3(2013 年 5 月)引入了 commit 1a20dd4 中的 size-garbage 输出

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

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

同时在 loose 垃圾 上发出警告,而不是由于以下原因导致的错误 在count_objects()中使用report_garbage()函数

garbage cleaning tip section 提到:

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

git repack -adf     # kills in-pack garbage
git prune           # kills loose garbage

所以在应用两个命令后重试git count-objects -v -H


git repack man pagejthillin the comments

我更喜欢 big-A 选项:

“与-a 相同,除非使用-d
然后,前一个包中的任何无法访问的对象都会变成松散的、未打包的对象,而不是留在旧包中。”

Linus Torvalds 认为 -fgc--aggressive 被过度使用 -- so much so he suggested yanking the documentation for it
(2007 年)
-f 代表--no-reuse-delta

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

git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage

【讨论】:

  • 我更喜欢 big-A 选项,“与 -a 相同,除非使用 -d。然后前一个包中的任何无法访问的对象都会变成松散的、未打包的对象,而不是留在旧包中。” Linus Torvalds 认为 -f 像 gc 的 --aggressive 被过度使用了——以至于 he suggested yanking the documentation for it
  • @jthill 有趣。我不知道那个 2007 线程。我已将您的评论包含在答案中以提高知名度。
  • 谢谢你的链接,@jthill。这是一本非常有趣且具有教育意义的读物。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2017-09-04
  • 2012-05-06
  • 2013-02-17
  • 2017-10-09
  • 2017-08-03
相关资源
最近更新 更多