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

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

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

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

  • Git拉从另一个存储库的分支?
  • 如何重置远程GIT存储库以删除所有提交?
  • Git SVN错误:一个Git进程在早期崩溃了
  • 我如何显示已经上演的变化?
  • 我如何正确强制Git推?
  • 我可以在.git / config文件中注释掉一行吗?
  • git reset --mixed,--soft和--hard有什么区别?
  • 在Windows下的Git:MSYS或Cygwin?
  • 4 Solutions collect form web for “我怎样才能在Git远程仓库上触发垃圾收集?”

    远程回购应该被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清理它们。