git clone,upload-pack内存不足

时间:2014-10-23 06:40:45

标签: git malloc clone

我有一个git repo只存储PDF作为二进制文件,总共有70个PDF总共130MB,其中一些很大(约15MB)。 当我尝试将repo克隆到我的工作计算机时,我收到错误:

remote: Counting objects: 93, done.
remote: fatal: Out of memory, malloc failed (tried to allocate 36864964 bytes)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

其他一些git的答案声称通过重新包装回购来解决这个问题。 当我在服务器repo上尝试git repack --max-pack-size=5M -a -dgit gc时,我得到了相同的malloc错误。

git服务器位于我的个人网站空间,由1and1提供,我知道它不允许我在这个过程中使用36864964字节的内存。

如何将服务器存储库克隆到本地计算机上?

以下是服务器上运行的ulimit -a的输出:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) 131072
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 48165
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) 1800
max user processes              (-u) 90
virtual memory          (kbytes, -v) 131072
file locks                      (-x) unlimited

谢谢。

1 个答案:

答案 0 :(得分:1)

我尝试了nif的评论并通过sftp下载了repo。 然后我使用git repack --max-pack-size=3M -a -d以非常低的包装重新包装它。 然后我将其上传回服务器。

此时我又收到了一个错误:fatal: unable to create thread: Resource temporarily unavailable。在这一点上,我几乎可以肯定这是由于我的主机的低内存(也许是线程)配置导致的资源分配问题。

找到此stackexchange问​​题后:git push fatal: unable to create thread: Resource temporarily unavailable并设置:

git config pack.windowMemory "15m"
git config pack.SizeLimit "3m"
git config pack.threads "1"

(数字选择任意低)

我现在可以从本地计算机成功克隆服务器仓库了! 我怀疑,如果我从一开始就用上面的三行配置git,我就不会遇到这个问题。

再一次感谢你nif!