Gerrit 执行 git pull 的时候,提示 fatal: Out of memory, malloc failed (tried to allocate *** bytes)错误的解决方法

今天在提交代码的时候,先执行 git pull --rebase 遇到了out of memory 错误,如下:

$ git pull --rebaseorigin ultra_lc_dev

Fromssh://*********/branch

 * branch           branch-> FETCH_HEAD

First, rewinding head toreplay your work on top of it...

fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes)

查了好多资料也没有解决,解决方案里面说的最多的是:

    git config --global pack.windowMemory 1024m

但是没有什么用,看来还是要想其它办法。

最终结合之前的经验跟一些小的尝试还是解决了这个问题,下面是解决方案:

1 git stash

执行结果:

把本地的改动缓存起来。确保不会被后面的操作覆盖掉(这一步很关键,否则有可能改了半天的代码需要重新再改一遍了

2 git pull --rebase

执行结果:

fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes)

出错之后,git 会自动切换到一个临时分支。

3 git checkout 【原来的分支】

执行结果:

从临时分支切换回原来的分支。

4 gitk --all

执行结果:

可以看到当前branch上,当前结点之后的所有提交,包括最新的提交,

这个时候,复制主分支上最新的commit id.

5 git reset --hard 【最新的commit id

执行结果:

本地代码已经同步下来了服务器上的最新代码(this is what we want.)

6 git stash pop

执行结果:

把之前缓存的改动,merge到最新结点上。

到此,就已经解决掉了fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes) 的错误。

总结: 利用了 git reset --hard [commit-id] 的方式,来跳过了 git pull 的时候,挨个把commit merge到本地的操作。

需要注意的是:

保存好修改的文件(Step 1 git stash),因为reset --hard 操作会把本地的所有操作全部覆盖掉。

最后,祝大家工作愉快。

你可能感兴趣的:(Git/Gerrit,学习跟使用,git,malloc,out,of,memory,gerrit)