Git клон выходит из строя с ошибкой вне памяти - "фатальный: из памяти, malloc failed (попытался выделить 905574791 байт)/fatal: index-pack failed"
Я пытаюсь клонировать большой (1.4GB) репозиторий Git для 32-разрядной виртуальной машины Debian с 384 МБ ОЗУ. Я использую Git 1.7.2.5 и использую протокол SSH для клонирования ('git clone [email protected]:/my/repo')
Клону не удается выполнить это сообщение:
remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed
Я попытался уменьшить объем памяти Git для переупаковки в конце репозитория хоста и переупаковки:
git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d
Мои вопросы таковы:
- Является ли это проблемой размера клиента (клон) или она должна быть разрешена в репо, из которого я клонирую?
-
В любом случае, есть ли что-нибудь, что я могу сделать, чтобы сделать клон успешным? Многие потенциальные решения в Интернете включают в себя некоторые/все из следующих вещей, ни одно из которых не приемлемо в этом случае:
- существенно изменить содержимое репозитория (т.е. удалить большие файлы)
- предоставление виртуальной машины, которая делает клон более RAM
- дает VM, которая делает клон 64-разрядным виртуальным процессором.
- передача внеполосного (например, с использованием Rsync или SFTP для передачи каталога .git)
Спасибо заранее.
Ответы
Ответ 1
git clone
не будет смотреть на ваш параметр pack.packSizeLimit
, он все равно перенесет все в одном пакете - если только он не изменится с момента последнего просмотра.
Использование SCP или Rsync может помочь вам решить эту проблему. Удаление "бесполезных" больших файлов, а также переупаковка репозитория, который вы пытаетесь клонировать, также может помочь.
Предоставление большего количества ОЗУ для VM также может помочь - я не думаю, что вам потребуется 64-разрядное адресное пространство для размещения 900 МБ... Вы также можете предоставить ему достаточно пространства SWAP для обработки пакета 900 МБ вместо увеличения ОЗУ.
Ответ 2
У меня возникла аналогичная проблема в Windows, используя MSysGit 32 бит.
git 64 бита из Cygwin выполнили эту работу.
Возможно, вы должны использовать 64-битную виртуальную машину Debian (вместо 32-разрядной версии).
Мой оригинальный ответ доступен по запросу Git в Windows, "Недостаточно памяти - malloc failed" .
Ответ 3
Сегодня у меня была такая же проблема. В сервере Git не хватало памяти, но gitlab сообщил, что все еще имеется память. Мы проверили память с помощью htop (сообщено, что нет), перезапустили gitlab, и все вернулось к нормальному.
Ответ 4
sudo git pull
Я сталкивался с тем же сообщением об ошибке каждый раз, когда я тянул, и sudo git pull
действительно помог мне преодолеть это сообщение об ошибке, и нажатие было успешным.