man git-gc
里面没有明显的答案,而且我在 Google 上也没有任何运气(尽管我可能只是使用了错误的搜索词)。
我知道您应该偶尔在本地存储库上运行 git gc
以修剪悬空对象并压缩历史记录等——但是共享的裸存储库是否容易受到这些相同问题的影响?
如果重要的话,我们的工作流程是多个开发人员从共享网络驱动器上的裸存储库中提取和推送。 “中央”存储库是使用 git init --bare --shared
创建的。
最佳答案
作为Jefromi评论 Dan's answer , git gc
应该 在“正常”使用裸存储库期间自动调用。
我刚刚在两个已被积极使用的裸共享存储库上运行 git gc --aggressive
;一个在过去 3-4 周内提交了大约 38 次,而另一个在大约 3 个月内提交了大约 488 次。没有人在这两个存储库上手动运行 git gc
。
较小的存储库
$ git count-objects
333 objects, 595 kilobytes
$ git count-objects -v
count: 333
size: 595
in-pack: 0
packs: 0
size-pack: 0
prune-packable: 0
garbage: 0
$ git gc --aggressive
Counting objects: 325, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (323/323), done.
Writing objects: 100% (325/325), done.
Total 325 (delta 209), reused 0 (delta 0)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 8
size: 6
in-pack: 325
packs: 1
size-pack: 324
prune-packable: 0
garbage: 0
$ git count-objects
8 objects, 6 kilobytes
更大的存储库
$ git count-objects
4315 objects, 11483 kilobytes
$ git count-objects -v
count: 4315
size: 11483
in-pack: 9778
packs: 20
size-pack: 15726
prune-packable: 1395
garbage: 0
$ git gc --aggressive
Counting objects: 8548, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8468/8468), done.
Writing objects: 100% (8548/8548), done.
Total 8548 (delta 7007), reused 0 (delta 0)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 0
size: 0
in-pack: 8548
packs: 1
size-pack: 8937
prune-packable: 0
garbage: 0
$ git count-objects
0 objects, 0 kilobytes
我希望我在 gc
编辑这两个存储库之前就想到了它,但是我应该运行 git gc
而没有 --aggressive
选项以查看差异。幸运的是,我还有一个中等规模的事件存储库可供测试(近 2 个月内提交了 164 次)。
$ git count-objects -v
count: 1279
size: 1574
in-pack: 2078
packs: 6
size-pack: 2080
prune-packable: 607
garbage: 0
$ git gc
Counting objects: 1772, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1073/1073), done.
Writing objects: 100% (1772/1772), done.
Total 1772 (delta 1210), reused 1050 (delta 669)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 0
size: 0
in-pack: 1772
packs: 1
size-pack: 1092
prune-packable: 0
garbage: 0
$ git gc --aggressive
Counting objects: 1772, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1742/1742), done.
Writing objects: 100% (1772/1772), done.
Total 1772 (delta 1249), reused 0 (delta 0)
$ git count-objects -v
count: 0
size: 0
in-pack: 1772
packs: 1
size-pack: 1058
prune-packable: 0
garbage: 0
运行 git gc
显然对 count-objects
产生了很大的影响,即使我们定期 push
和 fetch
来自这个存储库。但在阅读the manpage for git config
, 我注意到默认的松散对象限制是 6700,我们显然还没有达到。
所以看来结论是否,您不需要需要在裸仓库上手动运行git gc
;* 但使用 gc.auto
的默认设置,可能需要很长时间才能自动进行垃圾回收。
* 一般,您不需要运行 git gc
。但有时you might be strapped for space并且您应该手动运行 git gc
或将 gc.auto
设置为较低的值。不过,我提出这个问题的理由只是出于好奇。
关于git - 我需要在裸仓库上运行 git gc 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532740/