Из репозитория Git репаки не
у меня есть репозиторий 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:$
для обработки этой ошибки я попытался переупаковать исходный репозиторий (согласно этот пост на форуме). Но вместо того, чтобы переупаковывать репозиторий, он описывает, как использовать команду "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]
на сервере установлен Git 1.6.5.7.
6 ответов:
ваше решение получило рабочую копию локально и удаленно, но снова вызовет проблемы, когда удаленный репозиторий решит снова упаковать себя. К счастью, вы можете установить параметры конфигурации, которые уменьшат объем памяти, необходимый для переупаковки в обоих репозиториях-они по существу делают параметры командной строки, которые вы добавили в параметры по умолчанию при переупаковке. Итак, вы должны войти в удаленный компьютер, перейти в репозиторий и сделать:
git config pack.windowMemory 10m git config pack.packSizeLimit 20m
вы возможно, вы захотите сделать то же самое в своем локальном репозитории. (Кстати, я предполагаю, что либо ваш репозиторий очень большой, либо это машины с небольшой памятью - эти значения кажутся мне очень низкими.)
для чего это стоит, при получении сбоев malloc при переупаковке очень большие репозитории в прошлом, я также изменил значения
core.packedgitwindowsize
,core.packedgitlimit
,core.deltacachesize
,pack.deltacachesize
,pack.window
иpack.threads
но это звучит так, как будто вам не нужны никакие дополнительные опции :)
без прямого доступа к репозиторию и, следовательно, не имея возможности выполнить переупаковку, выполнение мелкого клона, а затем постепенная выборка при увеличении глубины помогли мне.
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
надеюсь, что он все еще может помочь кому-то.
Я решил проблему, используя следующие шаги.
- получил репозиторий, извлеченный с сервера на мою локальную машину (используя необработанную копию по ssh)
- Перепакованная локальный репозиторий
git repack -a -d --window-memory 10m --max-pack-size 20m
- создал пустой репозиторий на сервере
git 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
на Dreamhost это, по-видимому, вызвано
mmap
. Код переупаковки используетmmap
чтобы отобразить содержимое некоторых файлов в память, и поскольку убийца памяти недостаточно умен, он считает файлы mmapped в качестве используемой памяти, убивая процесс Git, когда он пытаетсяmmap
большой файл.решение состоит в том, чтобы скомпилировать пользовательский двоичный файл Git с
mmap
поддержка отключена (configure NO_MMAP=1
).
Я использую git версии 1.7.0.4 и он принимает эту команду. Возможно, что Git версии 1.6 не принимает эту команду.
попробуйте создать новый репозиторий с некоторыми случайными изменениями. Затем упакуйте его с помощью этой команды.
У меня была такая же проблема на ubuntu 14.10 с git 2.1.0 на частном github.com хранилище. (Entreprise маршрутизатор подозревается! Работает в разных сетях wifi, кроме как на рабочем месте)
* GnuTLS recv error (-54): Error in the pull function. * Closing connection 2jects: 31% (183/589) error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly fatal: protocol error: bad pack header
мое решение состояло в том, чтобы клонировать git с помощью ssh (я заранее настроил ssh-ключи*), например:
будет:
git clone git@github.com:USERNAME/REPOSITORYNAME.git
*: (генерация ключа ssh)
ssh-keygen-t rsa-C "your_email_address_registered_with_github@domain.com"
затем войдите в github, в настройках, импортируйте ssh-ключи и импортируйте его из ~/.ssh / id_rsa.паб.