Answers:
这主要取决于使用多少存储库。一个用户每天检查一次,而分支/合并/等操作每周检查一次,您可能不需要每年运行一次以上。
数十名开发人员从事数十个项目,每个项目每天要检查2-3次,因此您可能希望每晚运行一次。
不过,频繁运行它并不会受到伤害。
我要做的是现在运行它,然后从现在开始的一周内测量磁盘利用率,再次运行,然后再次测量磁盘利用率。如果大小减少5%,则每周运行一次。如果下降幅度更大,则应更频繁地运行它。如果其下降幅度较小,则应减少运行频率。
请注意,垃圾收集存储库的不利之处在于,垃圾被收集了。众所周知,作为计算机用户,我们现在认为是垃圾的文件将来三天之内可能会变得非常有价值。git保留了大部分碎片的事实已经节省了我的培根数次–通过浏览所有悬空的提交,我已经恢复了很多我偶然罐装的工作。
因此,在您的私人克隆中别太整齐了。几乎不需要它。
OTOH,对于主要用作远程设备的回购协议,数据可恢复性的价值值得怀疑。所有开发人员推动和/或撤离的地方。在那里开始频繁运行GC和重新包装可能是明智的。
git gc --help
,特别是该--prune
选项)。还提到了gc.reflogExpire
,这使我相信您在过去90天内访问过的任何委托都不会被收集。(我的git版本:v1.7.6)
git的最新版本会在需要时自动运行gc,因此您无需执行任何操作。请参阅man git-gc(1)的 “ 选项”部分:“某些git命令在执行可能会创建许多松散对象的操作后运行git gc --auto。”
gc --auto
猜我一定不能运行任何运行的命令。
This repository currently has approximately 1500 loose objects.
以下命令将带来类似的数字:
$ git count-objects
除了它的来源,git-gui会自己进行数学运算,实际上是对.git/objects
文件夹中的内容进行计数,并且可能带来一个近似值(我不知道tcl
正确地阅读它!)。
在任何情况下,似乎都会根据300个松散物体附近的任意数量发出警告。
Git-Gui
和count-objects
都不是这里问题的好答案...但是它们应该是!
您可以使用新的设置(Git 2.0 Q2 2014)毫无中断地做到这一点gc.autodetach
。
参见commit 4c4ac4d和9f673f9(NguyễnTháiNgọcDuy,aka pclouds):
gc --auto
需要花费时间,并且可以暂时阻止用户(但不会那么烦人)。
使它在支持它的系统上在后台运行。
在后台运行唯一丢失的是打印输出。但是gc output
并不是很有趣。
您可以通过更改将其保持在前台gc.autodetach
。
从该2.0版本开始,尽管存在一个错误:git 2.7(2015年第四季度)将确保不会丢失错误消息。
见提交329e6e8通过(2015年9月19日)阮泰玉维战(pclouds
)。
(由Junio C gitster
Hamano合并--在076c827号提交中,2015年10月15日)
gc
:保存守护进程中的日志gc --auto
并在下次打印虽然commit 9f673f9(
gc
:--auto
在后台运行的config选项-2014-02-08)有助于减少一些关于'gc --auto
'占用终端的抱怨,但它会带来另一组问题。作为守护程序的结果,此集合中的最新集合已
stderr
关闭,所有警告均丢失。结尾的警告cmd_gc()
特别重要,因为它告诉用户如何避免gc --auto
重复运行。
因为stderr是关闭的,所以用户不知道,他们自然会抱怨'gc --auto
'浪费CPU。守护进程
gc
现在保存stderr
到$GIT_DIR/gc.log
。除非用户删除,否则不会运行并打印
以下gc --auto
内容gc.log
gc.log
。
引用来自: 使用Git进行版本控制
Git自动运行垃圾收集:
•如果存储库中有太多松散的对象
•推送到远程存储库时
•在执行一些可能引入许多松散对象的命令之后
•当某些命令(例如git reflog到期)显式请求时
最后,当您使用git gc命令明确请求垃圾回收时,就会发生垃圾回收。但是那应该是什么时候呢?这个问题没有可靠的答案,但是有一些好的建议和最佳实践。
您应该考虑在以下几种情况下手动运行git gc:
•如果您刚刚完成了git filter-branch。回想一下,filter-branch重写了许多提交,引入了新的提交,并将旧的提交留在ref上,当您对结果满意时应将其删除。所有这些死对象(由于您刚刚删除了一个指向它们的引用而不再引用)应通过垃圾回收删除。
•在执行一些可能引入许多松散对象的命令之后。例如,这可能是一项大型的基础工作。
另一方面,您何时应该警惕垃圾回收?
•如果有可能需要恢复的孤立裁判
•在git rerere的情况下,您无需永远保存分辨率
•仅在标签和分支足以使Git永久保留提交的情况下
•在FETCH_HEAD检索(通过git fetch进行URL直接检索)的上下文中,因为它们会立即受到垃圾回收的影响
git commit --amend
)。可以用验证git log --reflog
。我将分支推送到远程存储库,然后再次检查了我的树。无法到达的提交仍然存在。显然git gc
,此推送发生时未运行。……?
您不必git gc
经常使用,因为git gc
(垃圾收集)会在几个常用命令上自动运行:
git pull
git merge
git rebase
git commit