Git pull fatal: Out of memory, malloc failed
Solution 1
If you are the only one using this repo, you can follow the git filter-branch option described in "How to purge a huge file from commits history in Git?"
The simpler option is cloning the repo to an old commit, and force push it, as described in "git-filter-branch
to delete large file".
Either one would force any collaborator to reset his/her own local repo to the new state you are publishing. Again, if you are the only collaborator, it isn't an issue.
Solution 2
In my case it was something as simple as trying to pull a big repo in a 1GB RAM box without swap.
I followed this tutorial https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 to create some swap space on the server and worked.
Their "faster" way:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
You can make these changes permanent by adding to /etc/fstab:
/swapfile none swap sw 0 0
They recommend adding to /etc/sysctl.conf:
vm.swappiness=10
vm.vfs_cache_pressure = 50
Solution 3
Even if the big image files have been deleted after having being pushed, they do stay in the git
history.
I would suggest to forcibly remove them from the git history (I think that is possible, but it involves a delicate procedure that I don't know).
Alternatively, pull the repository before the mistakenly added files, patch the repository to make the relevant small patches, clone that, and use that (perhaps with a dump/restore) as your master git.
I don't know well the details, but I did read it could be possible
Comments
-
Elmor almost 2 years
I've a repo on https://bitbucket.org/
Few days ago by a mistake big number of image files were pushed in the repo. then files were deleted via another push. after that repo worked ok, but today when i try to pull from the repo:
$ git pull Password for 'https://[email protected]': 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
I've tried:
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
No luck there, not sure what actions should i take next...
The size of the repo should be around 10-20m of code. what actions should i take next?UPDATE 1
i executed these commands:$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch public/images/*' HEAD Rewrite a1c9fb8324a2d261aa745fc176ce2846d7a2bfd7 (288/288) WARNING: Ref 'refs/heads/master' is unchanged
and
$ 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://[email protected]/repo.git + 203e824...ed003ce demo -> demo (forced update) + d59fd1b...a1c9fb8 master -> master (forced update)
Pull then works ok:
$ git pull Already up-to-date.
But when i try to clone repo i get
~/www/clone$ git clone [email protected]: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
UPDATE 2
Sadly enough i didn't find all of the large files. some are still left. So i asked support to kill all the logs of the repoUPDATE 3
In the end i had to kill old & create new repo. -
Elmor over 11 yearscollaborators aren't problem. now i've got cloning error. see update 1
-
Elmor over 11 yearsThanks for the general instructions ;)
-
VonC over 11 years@Elmor then you need to contact BitBucket in order for them to run a '
git gc
' on your repo (as mentioned in stackoverflow.com/a/11404097/6309). They should run it anyway (confluence.atlassian.com/pages/viewpage.action?pageId=287998264), but I am not sure if thegit push --force
did trigger saidgit gc
. -
VonC over 11 years@Elmor Plus, BitBucket might not clean recent deleted history, so you still might have to contact BitBucket in order to make some more thorough cleaning:
git gc --prune=today --aggressive
or even more, as described in stackoverflow.com/a/1908476/6309 -
Elmor over 11 yearsThanks, wrote to the support of bitbucket. waiting for reaction ;)
-
crobicha over 7 yearsI used their "faster way" but with 1G and it solved my problem, thanks!
-
Sean Halls over 6 yearsThis was what I needed not just to pack & push, but to clone as well.
-
Iman Mirzadeh over 6 yearsWow! Thanks dude, you saved the day