git - 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
解决方案
首先,Git不允许文件大于 100 MB。所以,千兆字节真的没有机会(或者增加最大尺寸是不好的)!
Git 不允许这样做是有原因的。假设您有一个 1 GB 的文件。git 中的每次提交都不会保存差异,而是获取该文件的整个快照。因此,最终在 3 次提交之后,您的 repo 的大小将达到 3 GB,它只会占用您的空间并导致克隆、获取和所有内容的速度变慢。
如果您使用 git-lfs,则指向实际 LFS 跟踪文件的指针实际上保存在您的存储库中。3 GB 数据仍然存在于您的远程存储库中(作为 BLOB),但并非所有 3 GB 数据都保存在您的本地存储库中,根据您的提交哈希,git-lfs 只会延迟下载您当前使用的版本而不是拥有所有三个版本,因此无论您正在处理的提交如何,您都将只有 1 GB 的文件。
推荐阅读
- python - cron 运行脚本时,subprocess.call 总是返回错误
- wordpress - 如何将自定义控件添加到页面?
- r - 按照以下方式进行基本添加
- bash - 如何加快此查询以检索所有配置单元表的 lastUpdateTime?
- javascript - 在文本标签中调用函数
- android - 如何在android的自定义评分栏中增加星星之间的间距?
- jenkins - Gradle“gradle-wrapper.properties”动态/可配置的distributionUrl
- sql - ORACLE 查询,包含类别和子类别的总数百分比
- php - 如何在 ups API 包装器中设置访问点?
- javascript - 旋转后无法在图像上绘制它是在原始画布方向上绘制