Git拉致命:内存不足,malloc失败了

Elm*_*mor 10 memory git clone bitbucket git-clone

我在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  
Run Code Online (Sandbox Code Playgroud)

我试过了:
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
Run Code Online (Sandbox Code Playgroud)

那里没有运气,不知道我接下来应采取什么行动......
回购的大小应该在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
Run Code Online (Sandbox Code Playgroud)

$ 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)
Run Code Online (Sandbox Code Playgroud)

拉然后工作正常:

$ git pull
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

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

~/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
Run Code Online (Sandbox Code Playgroud)

更新2
可悲的是,我没有找到所有的大文件.有些人还在离开.所以我要求支持杀死回购的所有日志

更新3
最后我不得不杀死旧的并创造新的回购.

小智 9

在我的情况下,这是一个简单的事情,试图在没有交换的1GB RAM盒中拉大回购.

我按照本教程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
Run Code Online (Sandbox Code Playgroud)

您可以通过添加到/ etc/fstab使这些更改永久化:

/swapfile   none    swap    sw    0   0
Run Code Online (Sandbox Code Playgroud)

他们建议添加到/etc/sysctl.conf:

vm.swappiness=10
vm.vfs_cache_pressure = 50
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 4

如果您是唯一使用此存储库的人,您可以遵循“如何从 Git 中的提交历史记录中清除大文件? ”中描述的 git filter-branch 选项。

更简单的选项是将存储库克隆到旧提交,并强制推送它,如“git-filter-branch删除大文件”中所述。

任何一种都会迫使任何协作者将他/她自己的本地存储库重置为您正在发布的新状态。同样,如果您是唯一的合作者,这不是问题。

  • @Elmor Plus,BitBucket 可能不会清理最近删除的历史记录,因此您可能仍然需要联系 BitBucket 以便进行更彻底的清理: `git gc --prune=today --aggressive` 甚至更多,如 http: 中所述: //stackoverflow.com/a/1908476/6309 (2认同)

归档时间:

查看次数:

25250 次

最近记录:

7 年,9 月 前