如何在Git远程存储库上触发垃圾收集?

如何在Git远程存储库上触发垃圾收集?,git,repository,git-gc,Git,Repository,Git Gc,正如我们所知,我们可以定期运行git gc将对象打包到.git/objects下 但是,在远程中央Git存储库的情况下(无论是裸存储库还是非裸存储库),在多次推送之后,myproj.Git/objects下有许多文件;每次提交似乎都会在那里创建一个新文件 我怎样才能打包这么多文件?(我指的是远程中央裸机存储库上的,而不是本地克隆存储库上的。)应该说明您应该多久运行一次垃圾收集 最简单的选择是使用windows中的计划任务或Unix中的cron作业定期运行git gc。这样,您甚至不需要考虑它。远

正如我们所知,我们可以定期运行
git gc
将对象打包到
.git/objects

但是,在远程中央Git存储库的情况下(无论是裸存储库还是非裸存储库),在多次推送之后,
myproj.Git/objects
下有许多文件;每次提交似乎都会在那里创建一个新文件

我怎样才能打包这么多文件?(我指的是远程中央裸机存储库上的,而不是本地克隆存储库上的。)

应该说明您应该多久运行一次垃圾收集


最简单的选择是使用windows中的计划任务或Unix中的cron作业定期运行
git gc
。这样,您甚至不需要考虑它。

远程repo应该配置为在提交后根据需要运行gc。请参阅
git-gc
git-config
手册页中的
gc.auto
文档

然而,远程repo不需要那么多垃圾收集,因为它很少有悬空(不可访问)提交。这些通常是由于分支机构删除和重新定基等原因造成的,这些通常只发生在本地回购中


因此,重新打包需要更多的gc,这是为了节省存储空间,而不是清除实际的垃圾。
gc.auto
变量足以处理此问题。

虽然您应该有一些定期自动处理此问题的进程,但运行它没有问题

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)...
在多次推送之后,
myproj.git/objects下有许多文件

git 2.11+(2016年第4季度)和预接收挂钩将不会有这么多。
在这种情况下,您根本不需要触发
git gc

参见,,(2016年10月3日)作者。
(于2016年10月17日合并)

接收包
:隔离对象,直到接收前接受 为了让“git push”的接收端检查接收到的历史记录并决定拒绝推送,从发送端发送的对象需要提供给钩子和连接检查机制,这通常是通过将对象存储在接收存储库中并让“
git gc
”来完成的让它过期

相反,将新接收的对象存储在一个临时区域中,并通过仅在需要时对它们重用备用对象存储机制使它们可用 决定是否接受检查,一旦决定,要么将它们迁移到存储库,要么立即清除它们

该临时区域将由新的环境变量
GIT\u quantial\u environment
设置


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

谢谢你的建议,但我的问题是如何在远程裸存储库上运行“git-gc”,不是在本地克隆的存储库上。非常确定您不能远程调用git gc,这就是为什么您必须在包含裸存储库的计算机上调度它的原因。另请参阅。如果我们推动了一个bug修复分支,让几个人在上面进行协作,然后在合并到master时执行重新基址,那么我们实际上是在远程重新基址。即使我们不执行重定基址,远程回购也应该经常打包,以便新用户可以更快地克隆。@Ryuu,是的,你说得很对。这是远程回购可能以松散对象告终的方式之一。然而,我在谈到重定基期时确实说过“通常”。也许随着人们对git的使用变得越来越复杂,这种情况变得越来越普遍。即使如此,自动垃圾收集最终也应该解决这个问题。我认为在强制推送覆盖上一次提交推送(?)时也会导致松散提交,但我可能错了。有什么想法吗?@Sааааааааааӽ是的,这会产生松散的物体。它属于重定基础的标题,尽管这在远程回购中并不常见,但它仍然会发生,特别是在拉请求工作流或任何其他工作流中,该工作流允许用户在远程回购上拥有私有分支,用户可以以非快进方式修改这些分支。当我在2010年写这篇文章时,GitHub并不像现在这样占主导地位。