remote:fatal:内存不足,在使用post-receive hook的git push上realloc失败了

时间:2016-09-18 23:26:40

标签: git

当我使用1and1对我的共享主机上的远程Route时,我收到以下错误消息:

git push remotename branchname

我使用以下代码设置了远程git repo的挂钩:

Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 688 bytes | 0 bytes/s, done.
Total 7 (delta 2), reused 0 (delta 0)
remote: fatal: Out of memory, realloc failed

当我通过SSH连接到我的遥控器并发出#!/bin/sh git --work-tree=/absolute/path/to/remotedir --git-dir=/absolute/path/to/remotedir/live.git checkout -f 时,我发现有足够的可用内存(不确定这是否与我的问题有关):

free

我的遥控器正在使用:

             total       used       free     shared    buffers     cached
Mem:      12330360   11796336     534024      32080      25248    8553496
-/+ buffers/cache:    3217592    9112768
Swap:       270332       3552     266780

我当地人正在使用:

Debian 3.14.73-2~ui80+4
git version 2.1.4

真的不确定为什么会这样。任何帮助表示赞赏!

修改

当我在遥控器上运行OS X 10.11.2 git version 2.4.9 (Apple Git-60) 时,我得到:

ulimit -a

4 个答案:

答案 0 :(得分:3)

感谢@ЕлинЙ。共享的 !但是使用语法我们遇到了一些问题,但也许适用于他的服务器。对于1and1,我们必须使用这个git配置来使远程仓库工作:

[core]
    packedGitWindowSize = 640m
    packedGitLimit = 640m
    preloadindex = false

[pack]
    windowMemory = 640m
    threads = 1

答案 1 :(得分:2)

我已经设法解决了这个问题。至少,我几个月没有得到它。由于我做了很多试验和错误,阅读了许多不同的建议等,我不确切知道修改了哪些配置。

因此,我想分享我的git配置,以帮助其他人作为参考:

core.preloadindex=false
core.packedgitwindowsize=640m
core.packedgitlimit=640m
pack.windowmemory=640m
pack.threads=1

答案 2 :(得分:1)

根据ulimit,您的托管服务器已将虚拟内存的每进程限制设置为768MB。你的钩子后脚本会被杀死,因为它的要求可能超出限制。

你可以尝试更新你的“git config”以适应你的环境。

有一些指示

https://github.com/hbons/SparkleShare/issues/519

答案 3 :(得分:1)

在1and1主机上,在命令提示符下...

ulimit -a

报告了几件事......一件是:

open files (-n) 512

跑命令:

ulimit -Sn unlimited

并改为:

open files (-n) 1024

然后git commit会起作用。没有更多的错误。