当推送到远程服务器时,我收到错误:
Counting objects: 58, done.
Compressing objects: 100% (35/35), done.
fatal: Out of memory, malloc failed (tried to allocate 595059947 bytes)
error: pack-objects died of signal 13
error: failed to push some refs to 'git@cassandra.predictioninstitute.com:development'"
我认为问题在于我不小心编写了一些非常大的日志文件。但我后来删除了它们(git rm logfile),但错误仍然存在。而且他们没有出现在“git status”中。我该如何从中恢复?
答案 0 :(得分:4)
如果您反对重写历史记录或不反对,我无法通过您的评论来判断。如果您不反对,此命令将删除历史记录中的大文件。
警告:这是破坏性且不可逆转的。首先备份您的存储库。如果您不喜欢结果,只需恢复备份:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file>' \
--prune-empty --tag-name-filter cat -- --all
该命令将从分支的历史记录中删除<file>
。为每个文件运行它会导致您遇到麻烦。
答案 1 :(得分:3)
以下命令为我解决了这个问题:
git config --global pack.windowMemory 256m
这会影响增量压缩的效果,因此您可能需要先尝试更大的尺寸,例如1g,具体取决于您的硬件和带宽。
此处有更多详情:https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html
答案 2 :(得分:0)
我在推送到覆盆子pi上托管的git-repo时遇到了这个错误。我试图推送的其中一个文件大于git服务器上的可用内存(内存+交换)。
通过在git服务器上临时创建一个新的交换文件解决了这个问题:
dd if=/dev/zero of=/media/store/swapfile bs=1024 count=655360
mkswap /media/store/swapfile
swapon /media/store/swapfile
运行以下命令验证是否添加了新的交换分区:
swapon
,cat /proc/swaps
或free
(我选择不将交换文件添加到/etc/fstab
,因此交换文件将在重新启动后消失。)