结帐时git内存不足
Posted
技术标签:
【中文标题】结帐时git内存不足【英文标题】:git out of memory on checkout 【发布时间】:2016-03-25 10:34:41 【问题描述】:我克隆了一个大型 repo,但出现错误(经过多次尝试)
克隆成功,但结帐失败
当试图解决这个问题时
git checkout -f HEAD
返回错误
致命:内存不足,重新分配失败2
我已经设置了一些更高的内存限制,因为克隆也遇到了问题
git config pack.WindowMemory 256m && git config pack.packSizelimit 256m
根据 Punit Vara(下)的以下建议,我还将 .git/config 编辑为:
[core]
packedGitLimit = 128m
packedGitWindowSize = 128m
[pack]
deltaCacheSize = 128m
packSizeLimit = 128m
windowMemory = 128m
我尝试将这些值更改为:128m、256m、512m、1024m。这对我不起作用。我仍然收到似乎出现在 41% 的相同错误。
任何人都有这方面的经验或知道哪里出了问题和/或可以做些什么来解决这个问题?谢谢。
【问题讨论】:
***.com/questions/10292903/… 谢谢,但这并没有解决问题。我尝试了不同的值,即 256m、512m 和 128m,但我仍然得到相同的错误。错误似乎总是在同一点,41%。 我想是时候git fsck
了。我希望这个存储库不包含唯一数据。
Git fsck:100% 目录,100% 对象。
因为你没有打包,只是阅读包。*配置值应该无关紧要。它是哪个版本的 git,您尝试过最新的版本吗?听起来值得向作者报告
【参考方案1】:
我收到此错误消息:“致命:内存不足,重新分配失败 2
" 尝试使用 git add --all
时。原因是我试图添加一个非常大的 csv 文件 (>1.6 GB)。Git/Github 不允许上传这么大的文件。作为解决方案你可以把文件放在gitignore上或者把文件移动到另一个没有连接到git的目录。
【讨论】:
【参考方案2】:在我的服务器更新为 64 位架构后,我遇到了同样烦人的问题。 git 的操作系统内存限制为 600m。
core.preloadIndex = false
终于为我成功了。自 git 版本 2.1 起默认为 true
【讨论】:
【参考方案3】:设置以下参数来解决这个问题:
core.packedGitWindowSize
在单个映射操作中映射到内存的包文件的字节数。较大的窗口大小可以让您的系统更快地处理较少数量的大型包文件。由于对操作系统内存管理器的调用增加,较小的窗口大小会对性能产生负面影响,但在访问大量大型包文件时可能会提高性能。
如果在编译时设置了 NO_MMAP,则默认为 1 MiB,否则在 32 位平台上为 32 MiB,在 64 位平台上为 1 GiB。这对所有用户来说都应该是合理的/操作系统。您可能不需要调整此值。
core.packedGitLimit
同时从包文件映射到内存的最大字节数。 如果 Git 需要一次访问超过这么多字节来完成操作,它将取消映射现有区域以回收进程内的虚拟地址空间。
在 32 位平台上默认为 256 MiB,在 64 位平台上默认为 8 GiB。 这对于所有用户/操作系统都应该是合理的,最大的项目除外。您可能不需要调整此值。
But sometimes you do need to set those values
这是一个完整的配置值列表,我能想到并可能与您的情况相关:
[http]
postbuffer = 524288000
[pack]
threads = 1
deltaCacheSize = 1024m
packSizeLimit = 1024m
windowMemory = 1024m
[core]
packedGitLimit = 1024m
packedGitWindowSize = 1024m
【讨论】:
【参考方案4】:试试这个:
git gc --auto --prune=today --aggressive
git repack
git config --global http.postbuffer 524288000
git config --global pack.windowMemory 256m
发现于git push Out of memory, malloc failed。
【讨论】:
感谢您的帖子。刚才试过这个。没用。以上是关于结帐时git内存不足的主要内容,如果未能解决你的问题,请参考以下文章