修复由于大二进制文件而减慢的git回购
我们有一个包含源代码和二进制文件的git repo。裸回购协议现在已经达到了约9GB,克隆它需要很长时间。大部分时间都花在“远程:压缩对象”上。在使用一个较大二进制文件的新版本进行提交后,获取需要很长时间,而且还需要压缩服务器上的对象 在阅读之后,我怀疑二进制文件的增量压缩也会对我们造成伤害,但我不确定如何解决这个问题 修复服务器上的裸回购的确切步骤是什么?我猜:修复由于大二进制文件而减慢的git回购,git,Git,我们有一个包含源代码和二进制文件的git repo。裸回购协议现在已经达到了约9GB,克隆它需要很长时间。大部分时间都花在“远程:压缩对象”上。在使用一个较大二进制文件的新版本进行提交后,获取需要很长时间,而且还需要压缩服务器上的对象 在阅读之后,我怀疑二进制文件的增量压缩也会对我们造成伤害,但我不确定如何解决这个问题 修复服务器上的裸回购的确切步骤是什么?我猜: 为我想要添加到.git/info/attributes中的所有扩展添加类似“*.zip-delta”的条目 运行“git repa
- 为我想要添加到.git/info/attributes中的所有扩展添加类似“*.zip-delta”的条目
- 运行“git repack”,但有哪些选项?adF是否会重新打包所有内容,并给我留下一个repo,其中没有对指定的文件类型进行增量压缩
- 运行“gitprune”。我原以为这是自动完成的,但当我在玩上述回购协议的裸体克隆时,运行它会将大小减少约2GB
- 克隆repo,添加并提交一个.gittributes,其条目与我在裸repo上的.git/info/attributes中添加的条目相同
- 打包对象时限制内存使用
git config pack.windowMemory 100m
git config pack.packSizeLimit 200m - 禁用某些扩展的增量压缩
echo'*.tar.gz-delta'>>信息/属性
echo'*.tar.bz2-delta'>>信息/属性
echo'*.bin-delta'>>信息/属性
echo'*.png-delta'>>信息/属性 - 重新打包存储库并收集垃圾
git重新打包-a-d-F——窗口内存100米——最大封装尺寸200米
git gc
此操作后会产生一些意外的副作用:您应该使用不同的机制来存储大型二进制文件,如果它们是由某些无法存储的内容生成的,则只能使用生成它们的代码,否则,我建议将它们全部移动到一个目录中,并根据您的需要使用rsync或svn进行管理。虽然您的问题是如何提高当前回购的效率,但我认为这是不可行的 听从人群的建议:
将二进制文件存储到别处是一种选择吗?Git真的很讨厌大的二进制文件,这一点已经得到承认。这就是为什么我们要这么做的原因……当我们开始使用git时,我们添加了uC二进制文件、我们的rootfs和工具链,以便只需查看git版本就可以获得过去的完整快照。我们对git的了解不够,无法预见它的迟钝。我计划正确地解决这个问题(一直在查看git附件,但不知道git bigfiles),但作为一个短期解决方案,我希望尽我所能提高当前repo的性能。我觉得将开发环境/工具链存储在虚拟机中更好(如果您必须存储不同版本的开发环境,只需在repo外部存储一个新的磁盘映像即可)。git附件()是一个可能的解决方案。“
echo'*.tar.gz-delta'>>info/gittributes
”应该是“echo'*.tar.gz-delta'>>info/attributes
”合理的建议,但不适用于我们的情况。最大(也是最有问题的)二进制文件是一个tar.bz2'ed rootfs,它需要花费数小时来构建。我想,在这个rootfs上,很少有文件在每次构建时都会得到更改,所以在这种情况下,不压缩它们,而是直接将它们添加到repo中可能更明智(以防不够清楚,将要添加的整个目录添加到tar中,而不是结果tar.bz2文件)这样一来,您的DIFF应该更小,因为Git不能很好地处理差异二进制文件。我完全同意这种策略来实现更持久的修复。而不是使用DEM环境中的VM,我考虑将版本存储在服务器上,而只是将文件中的一个文件放到当前的一个点。但是,您确定当前的回购不可能是MA吗?是否更高效?如果我理解我链接到的帖子,应该可以让它更好一点。如果我能摆脱“远程:压缩对象”只用于将来的抓取(而不是最初的克隆),这本身就会有所帮助。