Подтвердить что ты не робот

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)

Спасибо заранее.

4b9b3361

Ответ 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 действительно помог мне преодолеть это сообщение об ошибке, и нажатие было успешным.