我正在使用Git来版本化一系列二进制文件。它们压缩得很好,但是当我向它们推送时,我的中央回购似乎没有压缩。他们正在吃掉相当数量的配额,所以我一直想看看是否有办法迫使远程仓库进行GC。
这可能吗?我正在研究Project Locker所以我不相信我有SSH访问权限和GC自己的回购。有任何想法吗?感谢。
答案 0 :(得分:8)
如果你自己无法运行git gc
,那么你将不得不欺骗它自动运行。你不会完全控制它,但你应该至少能够让它运行。
git gc --auto
由几个命令运行;这里相关的是receive-pack,它在遥控器上运行以接收包作为推送的一部分。 gc --auto
只有在有足够松散的物体时才重新包装;截止值由配置参数gc.auto
确定,默认为6700。
如果您可以访问遥控器的gitconfig,则可以暂时将该截止值设置为1。在回购中应该至少有一个松散的对象,所以这会导致gc --auto
在你下次推动时做它的事情。
如果你无法访问遥控器的gitconfig,我所能想到的就是人为地创建一堆松散的对象。您可以通过创建分支,向其提交一堆小文件(具有不同内容),将分支推送到远程,然后从远程删除分支来实现。 (重要的是改变内容,或者他们只使用相同的斑点。)冲洗并重复。
答案 1 :(得分:2)
他们需要在结束时解决这个问题。他们可以使用post-receive hook或cron作业或类似的东西来做,但如果他们应该维护你的存储库,那就是它的一部分有很多原因。
答案 2 :(得分:1)
表格git-gc
man page:
某些git命令可能会自动运行git gc;有关详细信息,请参阅下面的--auto标志。
进一步说:
- 自动
使用此选项,git gc会检查是否需要管理;如果没有,它退出而不执行任何工作。一些git命令在执行可能会创建许多松散对象的操作后运行git gc --auto。
如果存储库中有太多松散的对象或太多的包,则需要内务处理。如果松散对象的数量超过gc.auto配置变量的值,则使用git repack -d -l将所有松散对象合并为单个包。将gc.auto的值设置为0将禁用自动包装松散对象。
如果包的数量超过gc.autopacklimit的值,则使用git repack的-A选项将现有包(标记为.keep文件的包除外)合并到单个包中。将gc.autopacklimit设置为0将禁用包的自动合并。
最后:
git gc --auto命令将运行 pre-auto-gc 挂钩。有关更多信息,请参阅githooks(5)。