今天使用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
- 从这里我大概知道了,删除分支或者清空stash会导致这个问题发生,而我最近刚刚大量做了这些操作。所以问题诱因应该找到了,所以我理所应当的执行了一遍这两条命令,“git gc --prune=now”执行看起来应该是失败了,这条命令同样报了Out of Memory。但是执行完后我并没有及时去查看pack文件夹,这是失误。
后面从一个stackOverFlow的解答上面找到了这个https://stackoverflow.com/questions/10292903/git-on-windows-out-of-memory-malloc-failed
从这句话能大概找到后两个问题的答案,“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已回不来。