首页 > 解决方案 > GitLab SSH 推送失败内存 malloc 失败错误

问题描述

我正在尝试通过 ssh 将 1.4GB 的大型 .sql 文件推送到 gitlab 项目。但是推送失败并出现以下错误: Enumerating objects: 3, done. Counting objects: 100% (3/3), done. remote: fatal: Out of memory, malloc failed (tried to allocate 1452837977 bytes) fatal: sha1 file '<stdout>' write error: Broken pipe error: remote unpack failed: unpack-objects abnormal exit

这是我的 gitconfig 文件的内容

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = my ssh url 
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

标签: gitsshgitlabpush

解决方案


首先,Git不允许文件大于 100 MB。所以,千兆字节真的没有机会(或者增加最大尺寸是不好的)!

Git 不允许这样做是有原因的。假设您有一个 1 GB 的文件。git 中的每次提交都不会保存差异,而是获取该文件的整个快照。因此,最终在 3 次提交之后,您的 repo 的大小将达到 3 GB,它只会占用您的空间并导致克隆、获取和所有内容的速度变慢。

如果您使用 git-lfs,则指向实际 LFS 跟踪文件的指针实际上保存在您的存储库中。3 GB 数据仍然存在于您的远程存储库中(作为 BLOB),但并非所有 3 GB 数据都保存在您的本地存储库中,根据您的提交哈希,git-lfs 只会延迟下载您当前使用的版本而不是拥有所有三个版本,因此无论您正在处理的提交如何,您都将只有 1 GB 的文件。


推荐阅读