应该多久使用一次git-gc?

手册页简单地写着:

鼓励用户在每个存储库中定期运行此任务,以保持良好的磁盘空间利用率和良好的操作性能。

是否有一些命令来获取一些对象计数,以确定是否到了gc的时候?


当前回答

这主要取决于存储库的使用量。有了一个用户每天签入一次,每周进行一次分支/合并等操作,你可能不需要一年运行它超过一次。

由于几十个开发人员在几十个项目中工作,每个人每天检查2-3次,您可能希望每晚运行它。

不过,比实际需要更频繁地运行它也无妨。

我要做的是现在运行它,然后一周后测量磁盘利用率,再次运行它,并再次测量磁盘利用率。如果它的大小下降了5%,那么每周运行一次。如果它下降更多,那么更频繁地运行它。如果它下降较少,那么运行频率就会降低。

其他回答

这主要取决于存储库的使用量。有了一个用户每天签入一次,每周进行一次分支/合并等操作,你可能不需要一年运行它超过一次。

由于几十个开发人员在几十个项目中工作,每个人每天检查2-3次,您可能希望每晚运行它。

不过,比实际需要更频繁地运行它也无妨。

我要做的是现在运行它,然后一周后测量磁盘利用率,再次运行它,并再次测量磁盘利用率。如果它的大小下降了5%,那么每周运行一次。如果它下降更多,那么更频繁地运行它。如果它下降较少,那么运行频率就会降低。

将它放到一个每天晚上(下午?)当您睡觉时运行的cron作业中。

你可以在没有任何中断的情况下,使用新的(Git 2.0 Q2 2014)设置gc.autodetach。

参见commit 4c4ac4d和commit 9f673f9 (nguyshape Thái ngeconc Duy, aka pclouds):

Gc—auto需要时间,并且可以暂时阻止用户(但也不那么烦人)。 让它在支持它的系统后台运行。 在后台运行唯一丢失的是打印输出。但是gc输出并不是很有趣。 你可以通过修改gc.autodetach来保持它在前台。


从2.0版本开始,就有一个bug: git 2.7(2015年Q4)将确保不会丢失错误消息。 参见commit 329e6e8 (19 Sep 2015) by nguyThái ngeconc Duy (pclouds)。 (由Junio C Hamano合并- gitster -在commit 076c827, 2015年10月15日)

gc: save log from daemonized gc --auto and print it next time While commit 9f673f9 (gc: config option for running --auto in background - 2014-02-08) helps reduce some complaints about 'gc --auto' hogging the terminal, it creates another set of problems. The latest in this set is, as the result of daemonizing, stderr is closed and all warnings are lost. This warning at the end of cmd_gc() is particularly important because it tells the user how to avoid "gc --auto" running repeatedly. Because stderr is closed, the user does not know, naturally they complain about 'gc --auto' wasting CPU. Daemonized gc now saves stderr to $GIT_DIR/gc.log. Following gc --auto will not run and gc.log printed out until the user removes gc.log.

我使用git gc后,我做了一个大的签出,并有很多新对象。它可以节省空间。例如,如果您使用git- SVN签出一个大型SVN项目,并执行git gc,通常可以节省大量空间

请注意,对存储库进行垃圾收集的缺点是,垃圾会被收集。作为计算机用户,我们都知道,我们现在认为是垃圾的文件在未来三天可能会变得非常有价值。git保留了大部分碎片,这一事实多次为我节省了精力——通过浏览所有悬垂的提交,我恢复了许多我不小心封存的工作。

所以在你的私人克隆中不要太洁癖。没有什么必要。

此外,数据可恢复性的价值是值得怀疑的回购主要用作远程,如。这是所有开发者前进和/或前进的地方。在那里,启动GC运行和频繁重新打包可能是明智的。