git将一个巨大的存储库推送到内存有限的服务器

时间:2013-11-03 16:59:50

标签: out-of-memory git-push

服务器只有64MB内存。我正在尝试将巨大的git存储库推送到它。最初,目标目录包含一个空的裸存储库。推动失败:

$ git push server:/tmp/repo master
Counting objects: 3064514, done.
Compressing objects: 100% (470245/470245), done.
fatal: Out of memory, calloc failed 
error: pack-objects died of signal 13
error: failed to push some refs to 'server:/tmp/repo'
$ ssh server cat /tmp/repo.git/config
[pack]
        threads = 1
        deltaCacheSize = 8m
        windowMemory = 32m
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true

在服务器上更改git config pack.windowMemory 16m后,我收到相同的错误消息。

同一推送成功进入localhost:

$ git push 127.0.0.1:/tmp/repo master
Password: 
Counting objects: 3064514, done.
Compressing objects: 100% (470245/470245), done.
Writing objects: 100% (3064514/3064514), 703.02 MiB | 10.84 MiB/s, done.
Total 3064514 (delta 2569775), reused 3059081 (delta 2565342)
To 127.0.0.1:/tmp/repo
 * [new branch]      master -> master

是否有远程git config设置可以使推送成功?或者我必须在推送之前在本地重新包装回购(使用什么设置)?

请注意,使用具有更多内存的其他服务器不是一种选择。可以选择将内存添加到现有服务器,最高可达96MB。如果满足内存限制,我可以在服务器上使用比平时更多的磁盘空间。

没有可行解决方案的类似问题:https://serverfault.com/questions/372899/git-fails-to-push-with-error-out-of-memory

在本地重新打包存储库没有帮助,git push打印出相同的错误。本地仓库中的重新包装设置:

git config core.packedgitlimit 32m
git config core.packedgitwindowsize=32m
git config pack.threads 1
git config pack.deltacachesize 8m
git config pack.windowmemory 32m
git config pack.packsizelimit 500m

我的想法是它失败的原因是对象的总数太大:即使SHA-1哈希值也不合适(20 * 3064514字节几乎是64MB)。

0 个答案:

没有答案