Git的内存使用情况

时间:2015-01-05 11:25:41

标签: git memory diff mime-types binaryfiles

创建包含一些二进制文件的存储库(是git确实不能很好地处理二进制文件,但这是二进制文件是必需文件的存储库),执行提交会变得臃肿。 / p>

当执行commit时,git的内存使用量达到2.7 GiB。有时,该过程甚至被操作系统杀死,因为它使用了所有剩余的系统资源。

这可能是由于内部使用的diff算法需要考虑原始文件和新文件,并且需要将至少一个文件存入内存(第二个文件可以作为)。

是否可以文件标记为二进制并指定存储库不需要计算差异,但只检查新版本(这可以通过将两个文件作为流处理来完成,因此在恒定的内存中)。毕竟,存储差异可能与复制新版本一样低效。

git存储库自动在计算机上维护。因此,如果该过程可以自动化并因此使用例如文件的MIME类型并自动标记所有二进制文件,那将是很好的。

1 个答案:

答案 0 :(得分:1)

如" Exclude a directory from git diff"中所述,您可以使用.gitattributes指令' -diff'来排除差异中的文件/文件夹。 :

lib/* -diff
dist/js/**/*.js -diff

为了避免因git diff导致内存不足,您还有since Git v2.2.0 (mid 2014) the configuration core.bigfilethreshold (以及default size for a pack file has been raised)。

最后,像GVFS (Git Virtual File System, 2017)这样的其他功能会改善这类问题,并且已经允许Microsoft管理largest Git repository on the planet(Windows代码库一个,大约3.5M文件大约300GB,每天1,760个“实验室除了数千个拉取请求验证构建之外,还构建了“跨440个分支”。这个功能尚未完全集成到Git中,但说明了可能的内容。