git clone,上传包内存不足

标签 git malloc clone

我有一个 git 存储库,仅将 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 答案声称已经通过重新打包存储库解决了这个问题。 当我尝试在服务器存储库上执行 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

谢谢。

最佳答案

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

此时我遇到了另一个错误:致命:无法创建线程:资源暂时不可用。此时,我几乎可以肯定这是由于我的主机的低内存(可能还有线程)配置导致的资源分配问题。

找到这个 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!

关于git clone,上传包内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522543/

相关文章:

windows - "git checkout --patch"与 autocrlf=true 不兼容吗?

c - 如何使用 malloc 捕获程序员错误?

malloc返回的指针可以改变吗

C# 克隆既不实现 IClonable 也不实现 ISerializable 的对象

git - 如何打印当前分支以外的分支的日志?

git - 如何将 RSA key 与远程 Git 存储库关联?

git - 如何将 2 个主题分支 rebase 到一个新分支上?

在 C 中创建动态字符串数组

php - 克隆和传递引用的问题

javascript - JQuery 从每个列表行中克隆最后一个元素