混帐拉致命的:内存不足,失败的malloc(Git pull fatal: Out of memor

2019-08-04 17:15发布

我有一个回购https://bitbucket.org/

日前由错误的大数字图像文件在回购被推。 然后文件被通过另一个推删除。 之后回购工作确定,但今天当我试图从回购拉:

$ git pull
Password for 'https://repo@bitbucket.org': 
warning: no common commits
remote: Counting objects: 4635, done.
remote: Compressing objects: 100% (1710/1710), done.
fatal: Out of memory, malloc failed (tried to allocate 4266852665 bytes)
fatal: index-pack failed  

我试过了:
1) git config --global pack.windowMemory 1024m
2)

$ git count-objects -v
count: 9
size: 48
in-pack: 4504
packs: 1
size-pack: 106822
prune-packable: 0
garbage: 0

没有运气,不知道行动应我接下来采取什么样的...
回购的规模应该在代码10-20M。 什么样的行动我接下来应?

更新1
我执行这些命令:

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch public/images/*' HEAD
Rewrite a1c9fb8324a2d261aa745fc176ce2846d7a2bfd7 (288/288)
WARNING: Ref 'refs/heads/master' is unchanged

$ git push --force --all
Counting objects: 4513, done.
Compressing objects: 100% (1614/1614), done.
Writing objects: 100% (4513/4513), 104.20 MiB | 451 KiB/s, done.
Total 4513 (delta 2678), reused 4500 (delta 2671)
remote: bb/acl: ayermolenko is allowed. accepted payload.
To https://repo@bitbucket.org/repo.git
 + 203e824...ed003ce demo -> demo (forced update)
 + d59fd1b...a1c9fb8 master -> master (forced update)

然后拉好的工作:

$ git pull
Already up-to-date.

但是,当我尝试克隆回购我得到

~/www/clone$ git clone git@bitbucket.org:repo.git
Cloning into 'clone'...
remote: Counting objects: 5319, done.
remote: Compressing objects: 100% (1971/1971), done.
fatal: Out of memory, malloc failed (tried to allocate 4266852665 bytes)
fatal: index-pack failed

更新2
可悲的是我没有找到的所有大型文件。 有的还在离开了。 所以我问的支持杀回购的所有日志

更新3
最后,我不得不杀死老和创造新的回购协议。

Answer 1:

如果您使用此回购只有一个,你可以按照所描述的git的过滤分支选项“ 如何清除从历史上提交一个巨大的文件在Git的? ”

简单的选择是克隆回购,以一个老犯,并力推它,如“描述git-filter-branch删除较大的文件 ”。

无论是一个将迫使任何合作者对他/她自己的本地回购重置要发布的新状态。 同样,如果你是唯一的合作者,这是不是一个问题。



Answer 2:

在我的情况下,它是为试图拉在1GB内存盒一个大回购不交换这样简单的事情。

我跟着这个教程https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04来在服务器上创建一些交换空间和工作。

他们的“快”的方式:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

您可以通过这些更改永久加入到/ etc / fstab文件:

/swapfile   none    swap    sw    0   0

他们建议增加的/etc/sysctl.conf:

vm.swappiness=10
vm.vfs_cache_pressure = 50


Answer 3:

即使大的图像文件都已经被推后,被删除了,他们留在git历史。

我会建议强行从git的历史中删除(我认为这是可能的,但它涉及到,我不知道一个微妙的过程)。

另外,拉库中的误添加的文件之前,修补库做出相关小块,克隆的是,和使用(或许与转储/恢复)作为主饭桶。

我不熟悉的细节,但我没有读它可能是可能的



Answer 4:

最近,我遇到了我的库之一这个问题。 类似的错误,在隐藏在某处回购大文件暗示。

Cloning into 'test_framework'...
remote: Counting objects: 11889, done.
remote: Compressing objects: 100% (5991/5991), done.
Receiving objects:  66% (7847/11889), 3.22 MiB | 43 KiB/sremote: fatal: Out of memory, malloc failed     (tried to allocate 893191377 bytes)
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOFs:  66% (7933/11889), 3.24 MiB
fatal: index-pack failed

为了解决这个问题我暂时产生大的交换驱动器(超过893191377个字节的服务器被要求的),从这里以下 http://www.thegeekstuff.com/2010/08/how-to-add-交换空间/

这让我成功地克隆,然后删除的罪魁祸首(有人已经在一个SQL转储文件选中)。 您可以使用:

git filter-branch --tree-filter 'rm -rf dumpfile.sql' HEAD

除去从混帐回购协议的文件。



文章来源: Git pull fatal: Out of memory, malloc failed