我有一个git repo,它只将PDF存储为二进制文件,总共有70个PDF,总计130MB,其中一些是大的(约15MB)。当我试图将回购复制到我的工作计算机上时,我得到了错误:
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 -d
或git gc
时,我会得到相同的malloc错误。
git服务器在我的个人网络空间上,由1and1提供,我认为它不允许我在这个过程中使用36864964字节的内存。
如何将服务器repo克隆到本地计算机上?
以下是服务器上运行的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
谢谢。
我尝试了nif的注释,并通过sftp下载了repo。然后,我使用git repack --max-pack-size=3M -a -d
以非常低的包大小重新打包它。然后我把它上传回服务器。
在这一点上,我得到了另一个错误:fatal: unable to create thread: Resource temporarily unavailable
。在这一点上,我几乎可以肯定这是由于我的主机内存(可能还有线程)配置不足而导致的资源分配问题。
找到此stackexchange后,问题:git push致命:无法创建线程:资源暂时不可用,设置:
git config pack.windowMemory "15m"
git config pack.SizeLimit "3m"
git config pack.threads "1"
(任意低选数字)
我现在可以从本地计算机成功克隆服务器回购了!我怀疑,如果我从一开始就用上面的三行配置git,我就不会有这个问题。
再次感谢你,漂亮!