error: Out of memory, malloc failed

error: Out of memory, malloc failed_第1张图片

今天使用git pull时出现了如上提示,从最后一句“Already up to date”应该可以看出来,git pull这个操作本身是成功了的,看起来是pack操作失败了,原因就是内存溢出了。尝试找组内同事看过,他们并不会出现跟我相同的错误提示,说明应该跟我最近的某些操作相关。

乍一看有点懵,git pull也能出错,简单梳理了后,有几个疑问

1. 是因为什么引发了这个溢出

2. pack操作到底是做什么

3. 要怎么解决

搜索“Auto packing the repository in background”可以找到这篇文章,文字不多感觉说的挺有用的https://www.cnblogs.com/yuzhaoblog/p/12377718.html

error: Out of memory, malloc failed_第2张图片

  • 从这里我大概知道了,删除分支或者清空stash会导致这个问题发生,而我最近刚刚大量做了这些操作。所以问题诱因应该找到了,所以我理所应当的执行了一遍这两条命令,“git gc --prune=now”执行看起来应该是失败了,这条命令同样报了Out of Memory。但是执行完后我并没有及时去查看pack文件夹,这是失误。

后面从一个stackOverFlow的解答上面找到了这个https://stackoverflow.com/questions/10292903/git-on-windows-out-of-memory-malloc-failed

error: Out of memory, malloc failed_第3张图片

从这句话能大概找到后两个问题的答案,“Disable delta compression globally. For this you have to set pack.window to 0. Of course this will make the repository much larger on disc” 

  • pack操作就是一个全局的增量压缩操作,关闭这个功能会导致代码仓库占用更大磁盘控件。
  • 要想关闭这个特性,就可以设置pack.window = 0,我当然也照做了,在做这个之前我还有一次切换分支的操作。

做完以上操作后,我重启我的SourceTree,再次git pull时就发现一切正常了,我去“.git/objects/pack”下面去看的时候,发现原来满满当当的目录就只剩下零散的几个文件了。当这时我把 “[pack] window=0” 从config中删除,再想回到过去,追寻问题本质时,那些被删除的pack已回不来。

你可能感兴趣的:(git)