man git-gc
没有一个明显的答案,我也没有任何运气与谷歌(虽然我可能刚刚使用错误的搜索条款).
我知道您应该偶尔git gc
在本地存储库上运行以修剪悬空对象并压缩历史记录等等 - 但是这是一个容易受到同样问题影响的共享裸存储库吗?
如果重要的是,我们的工作流程是多个开发人员从共享网络驱动器上的裸存储库中取出并推送到存储库."中央"存储库是使用创建的git init --bare --shared
.
Mar*_*off 31
当Jefromi对Dan的回答发表评论时,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
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
我希望在gc
编辑这两个存储库之前我已经想到了它,但是我应该git gc
没有--aggressive
看到差异的选项.幸运的是,我有一个中等大小的活动存储库需要测试(近两个月内有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
Run Code Online (Sandbox Code Playgroud)
运行git gc
显然做了一个大的凹痕count-objects
,尽管我们经常push
要和fetch
从该存储库.但在阅读该联机帮助页后git config
,我注意到默认的松散对象限制是6700,我们显然还没有达到.
因此,看来,结论是没有,你并不需要运行git gc
在裸回购手动; *但是使用默认设置gc.auto
,可能需要很长时间才能自动进行垃圾收集.
* 通常,您不需要运行git gc
.但有时候你可能会因空间而受限制,你应该git gc
手动运行或设置gc.auto
为较低的值.不过,我对这个问题的理由是简单的好奇心.
Dan*_*ing 15
从git-gc
手册页:
建议用户定期在每个存储库中运行此任务,以保持良好的磁盘空间利用率和良好的运行性能.
强调我的.裸存储库也是存储库!
进一步说明:执行的一项内务处理任务git-gc
是打包和重新包装松散的物体.即使你的裸库中没有任何悬空物,你也会 - 随着时间的推移 - 积累大量松散的物体.为了提高效率,这些松散的物体应定期包装.同样,如果大量的包积累,他们应该定期重新包装成更大(更少)的包.