创建包含一些二进制文件的存储库(是git
确实不能很好地处理二进制文件,但这是二进制文件是必需文件的存储库),执行提交会变得臃肿。 / p>
当执行commit
时,git
的内存使用量达到2.7 GiB
。有时,该过程甚至被操作系统杀死,因为它使用了所有剩余的系统资源。
这可能是由于内部使用的diff
算法需要考虑原始文件和新文件,并且需要将至少一个文件存入内存(第二个文件可以作为流)。
是否可以将文件标记为二进制并指定存储库不需要计算差异,但只检查新版本(这可以通过将两个文件作为流处理来完成,因此在恒定的内存中)。毕竟,存储差异可能与复制新版本一样低效。
git
存储库自动在计算机上维护。因此,如果该过程可以自动化并因此使用例如文件的MIME类型并自动标记所有二进制文件,那将是很好的。
答案 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中,但说明了可能的内容。