我怎样才能在Git远程仓库上触发垃圾收集?

正如我们所知,我们可以定期运行git gc来打包.git/objects下的.git/objects

对于远程中央Git仓库(不论是否为裸机),在多次推送之后, myproj.git/objects下有许多文件; 每个提交似乎在那里创build一个新的文件。

我如何打包许多文件? (我的意思是远程中央裸存储库上的,而不是本地克隆存储库上的)。

远程回购应该被configuration为在提交之后根据需要运行gc。 请参阅在git-gc和git-config手册页中的gc.auto文档。

但是,远程回购不需要太多的垃圾收集,因为它很less会有悬而未决(无法访问)的提交。 这些通常是由于分支删除和重新分配等事件造成的,这通常只发生在本地回购中。

所以gc需要更多的重新包装,这是为了节省存储空间,而不是去除实际的垃圾。 gc.autovariables足以处理这个问题。

虽然你应该有一个定期处理这个问题的过程,但是这是自动运行的

 git gc 

在裸仓库

 git@domU:/pix/git/repositories/abd.git$ ls -l total 28 drwxrwxr-x 2 git git 6 2010-06-06 02:44 branches -rw-rw-r-- 1 git git 66 2010-06-06 02:44 config -rw-r--r-- 1 git git 23 2011-03-15 18:19 description -rw-rw-r-- 1 git git 23 2010-06-06 02:44 HEAD drwxrwxr-x 2 git git 4096 2010-06-06 02:44 hooks drwxrwxr-x 2 git git 20 2010-06-06 02:44 info drwxrwxr-x 260 git git 8192 2010-09-01 00:26 objects drwxrwxr-x 4 git git 29 2010-06-06 02:44 refs $ git gc Counting objects: 3833, done. Compressing objects: 31% (1085/3500)... 

这个问题应该说明你应该多长时间运行一次垃圾回收。

最简单的select是在Windows中使用计划任务或在Unix中使用cron作业来定期运行git gc 。 这样你甚至不需要考虑。

在多次推送之后, myproj.git/objects下有许多文件

git 2.11+(2016年第四季度)和预接收钩子将不会有太多的变化。
在这种情况下,你将不必触发git gc

参见Jeff King( peff )的 提交62fe0eb , 提交e34c2e0 , 提交722ff7f , 提交2564d99 , 提交526f108 (2016年10月3日) 。
(由Junio C gitster合并- gitster -在25ab004 ,2016年10月17日提交 )

receive-pack :隔离对象,直到预先接受接受

为了让“git push”的接收端检查接收到的历史并决定拒绝推送,需要使发送端发送的对象可用于钩子和连接性检查的机制,并且这样做传统上通过将对象存储在接收存储库中,并让“ git gc ”使其到期。

相反,将新接收的对象存储在一个临时区域中,并且只有在我们决定是否接受这个检查时,通过重用这个替代对象存储机制才能使它们可用,一旦我们决定将它们迁移到存储库或立即清除它们。

该临时区域将由新的环境variablesGIT_QUARANTINE_ENVIRONMENT

这样,如果一个(大)推动被pre-receive钩子拒绝,那么这些大对象将不会在90天左右等待git gc清理它们。