代码之家  ›  专栏  ›  技术社区  ›  jocull

使用Git强制远程Repo压缩(GC)

  •  10
  • jocull  · 技术社区  · 15 年前

    我正在使用Git来版本一系列二进制文件。它们的压缩效果很好,但当我向它们推压时,我的中央回购似乎没有压缩。他们吃掉了我相当多的配额,所以我想看看是否有办法强制远程回购执行GC。

    这可能吗?我正在努力 Project Locker 因此,我不相信我有SSH访问权限进入和GC的回购自己。有什么想法吗?谢谢。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Cascabel    15 年前

    如果你跑不了 git gc 你自己,你得骗它自动运行。那时你不会完全控制它,但你至少应该能让它运转起来。

    git gc --auto 由多个命令运行;这里的相关命令是receive pack,它在远程运行以接收作为推送一部分的包。 gc --auto 只有当有足够多的松散对象时才重新打包;截断由config参数决定 gc.auto ,默认为6700。

    如果您有权访问远程的gitconfig,可以将该截止值临时设置为1。回购协议中应该至少有一个松散的对象,所以这应该会导致 gc—自动 下次你推的时候做它的事。

    如果你不能访问远程的gitconfig,我能做的就是人为地创建一堆松散的对象。你可以通过创建一个分支,向它提交一堆小文件(包含不同的内容),将分支推到远程,然后从远程删除分支来实现。(重要的是要改变内容,否则他们只会使用相同的斑点)漂洗和重复。

        2
  •  2
  •   Dustin    15 年前

    这确实是他们需要解决的问题。他们可以使用post-receive钩子或cron作业或类似的东西来完成这项工作,但是如果他们应该维护您的存储库,那么这就是其中的一部分,原因有很多。

        3
  •  1
  •   Aleksej Komarov    9 年前

    形式 git-gc man page :

    有些git命令可能会自动运行git gc;有关详细信息,请参见下面的--auto标志。

    进一步说:

    --自动

    使用此选项,Git GC检查是否需要任何客房管理;如果不是,它退出而不执行任何工作。有些git命令在执行可能创建许多松散对象的操作后运行git gc--auto。

    如果存储库中有太多松散的对象或包,则需要进行内务处理。如果松散对象的数量超过gc.auto配置变量的值,则使用git repack-d-l将所有松散对象合并到一个包中。将gc.auto的值设置为0将禁用松散对象的自动打包。

    如果包的数量超过了GC.AutopAcKit的值,那么现有的包(除了用A.保持文件标记的包)使用Git RePACK的-A选项合并成单个包。将gc.autopacklimit设置为0将禁用包的自动合并。

    最后:

    git gc--auto命令将运行 预自动gc 钩子。有关更多信息,请参阅githooks(5)。