我有一个git存储库驻留在内存有限的服务器上.当我尝试从服务器克隆现有存储库时,我收到以下错误
hemi@ubuntu:$ git clone ssh://hemi@servername.dk/home/hemi/repos/articles
Initialized empty Git repository in /home/hemi/Skrivebord/articles/.git/
hemi@servername.dk's password:
remote: Counting objects: 666, done.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
hemi@ubuntu:$
Run Code Online (Sandbox Code Playgroud)
为了处理这个错误,我试图重新打包原始存储库(根据此论坛帖子).但是,它不是重新打包存储库,而是描述了如何使用"git pack-objects"命令.
hemi@servername:~/repos/articles$ git repack -a -d --window-memory 10m --max-pack-size 100m
usage: git pack-objects [{ -q | --progress | --all-progress }]
[--all-progress-implied]
[--max-pack-size=N] [--local] [--incremental]
[--window=N] [--window-memory=N] [--depth=N]
[--no-reuse-delta] [--no-reuse-object] [--delta-base-offset]
[--threads=N] [--non-empty] [--revs [--unpacked | --all]*]
[--reflog] [--stdout | base-name] [--include-tag]
[--keep-unreachable | --unpack-unreachable
[<ref-list | <object-list]
Run Code Online (Sandbox Code Playgroud)
Git 1.6.5.7安装在服务器上.
Mar*_*air 105
您的解决方案已在本地和远程为您提供工作副本,但在远程存储库决定再次重新打包时会再次导致问题.幸运的是,您可以设置配置选项,这将减少在两个存储库中重新打包所需的内存量 - 这些选项基本上会使您在重新打包时添加到默认选项中的命令行参数.因此,您应该登录到远程,更改到存储库并执行以下操作:
git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
Run Code Online (Sandbox Code Playgroud)
您可能希望在本地存储库中执行相同的操作.(顺便说一下,我猜你的存储库非常大,或者这些是内存很少的机器 - 这些值对我来说似乎很低.)
对于它的价值,重新包装获得的malloc失败时非常过去大型的仓库,我也改变了价值观core.packedgitwindowsize,core.packedgitlimit,core.deltacachesize,pack.deltacachesize,pack.window和pack.threads,但它听起来好像你不需要任何进一步的选择:)
mmm*_*mmm 22
由于无法直接访问存储库,因此无法执行重新打包,执行浅层克隆然后逐渐获取,同时增加深度对我有帮助.
git clone YOUR_REPO --depth=1
git fetch --depth=10
...
git fetch --depth=100
git fetch --unshallow //Downloads all history allowing to push from repo
Run Code Online (Sandbox Code Playgroud)
希望它仍然可以帮助某人.
mid*_*iby 15
我使用以下步骤解决了这个问题.
git repack -a -d --window-memory 10m --max-pack-size 20mgit init --bare这没有回答这个问题,但有人可能会遇到这个问题:当pack-objects某种内存杀手(例如Dreamhost上使用的内存杀手)终止时,重新打包也可能在服务器上失败:
$ git clone project-url project-folder
Cloning into project-folder...
remote: Counting objects: 6606, done.
remote: Compressing objects: 100% (2903/2903), done.
error: pack-objects died of signal 9284.51 MiB | 2.15 MiB/s
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)
在Dreamhost上,这似乎是由mmap.重新打包代码用于mmap将一些文件的内容映射到内存中,并且由于内存杀手不够智能,它将mmapped文件计为已用内存,在尝试mmap大文件时终止Git进程.
解决方案是在mmap支持关闭(configure NO_MMAP=1)的情况下编译自定义Git二进制文件.
| 归档时间: |
|
| 查看次数: |
61490 次 |
| 最近记录: |