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

Git вне памяти при оформлении заказа

Я клонировал большое репо и получил ошибку (после нескольких попыток)

Клон преуспел, но проверка завершилась неудачно

При попытке исправить это с помощью

git checkout -f HEAD

появляется ошибка

Fatal: Недостаточно памяти realloc failed2

Я уже установил некоторые ограничения памяти, потому что клонирование также столкнулось с проблемами, установив

git config pack.WindowMemory 256m && git config pack.packSizelimit 256m

Основываясь на приведенном ниже совете от Punit Vara (ниже), я также редактировал .git/config:

[core]
packedGitLimit = 128m
  packedGitWindowSize = 128m

[pack]
  deltaCacheSize = 128m
  packSizeLimit = 128m
  windowMemory = 128m

И я попытался изменить эти значения на: 128m, 256m, 512m, 1024m. Это не сработало для меня. Я по-прежнему получаю ту же ошибку, которая появляется на 41%.

У кого-нибудь есть опыт с этим или с какой-либо идеей, где это происходит неправильно и/или что можно сделать для решения этой проблемы? Благодарю.

4b9b3361

Ответ 1

Я столкнулся с такой же неприятной проблемой после обновления моего сервера до архитектуры 64Bit. Предел памяти ОС для git составлял 600 м.

core.preloadIndex = false

наконец, помогло. По умолчанию он равен true, поскольку git версия 2.1

Ответ 3

Задайте следующие параметры, чтобы исправить эту проблему:

core.packedGitWindowSize

Количество байтов файла пакета для отображения в память в одной операции сопоставления. Большие размеры окон могут позволить вашей системе быстрее обрабатывать меньшее количество файлов большого пакета. Меньшие размеры окон негативно скажутся на производительности из-за повышенных вызовов диспетчера памяти операционных систем, но могут повысить производительность при доступе к большому количеству больших файлов пакетов.

Значение по умолчанию 1 MiB, если во время компиляции было установлено NO_MMAP, в противном случае 32 MiB на 32-разрядных платформах и 1 GiB на 64-разрядных платформах.
Это должно быть разумным для всех пользователей/операционных систем. Вам, вероятно, не нужно настраивать это значение.

core.packedGitLimit

Максимальное количество байтов для одновременного отображения в памяти из файлов пакетов.
Если для Git требуется получить доступ к более чем одному из этих байтов сразу, чтобы завершить операцию, он будет отключать существующие регионы для восстановления виртуального адресного пространства внутри процесса.

По умолчанию используется 256 MiB на 32-битных платформах и 8 GiB на 64-разрядных платформах.
Это должно быть разумным для всех пользователей/операционных систем, за исключением крупнейших проектов.
Вам, вероятно, не нужно настраивать это значение.


But sometimes you do need to set those values

Вот полный список значений конфигурации, которые я могу придумать и могу иметь отношение к вашему делу:

[http]
    postbuffer = 524288000
[pack]
    threads = 1
    deltaCacheSize = 1024m
    packSizeLimit = 1024m
    windowMemory = 1024m
[core]
    packedGitLimit = 1024m
    packedGitWindowSize = 1024m

Ответ 4

Я получил это сообщение об ошибке: "Fatal: Out of memory, realloc failed2" при попытке использовать git add --all. Причина в том, что я попытался добавить очень большой файл csv ( > 1,6 ГБ). Git/Github не позволяет загружать такой большой файл. В качестве решения вы можете поместить файл в gitignore или перенести файл в другой каталог, не подключенный к git.