服务器只有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)。