Git push - неоптимальная упаковка - недостаточно памяти - PullRequest
17 голосов
/ 05 марта 2012

Я мог бы действительно использовать некоторую помощь здесь.

Я только что создал новое голое репо, чтобы действовать в качестве производственной цели для толчков разработчиков.У меня также есть рабочий веб-каталог на сервере в качестве git-репо.На сервере работает git 1.7.4.1 на centos5.5

После создания нового репо в веб-каталоге я выполнил команду git add.Он подсчитал что-то вроде 2300 и несколько странных файлов и более 230 тыс. Вставок.

Я сделал коммит из только что добавленной файловой базы.Ехали красиво и чисто.Когда я делал мастер git push origin, он продолжает давать мне это (пожалуйста, обратите внимание, у меня 8 процессоров, следовательно, 8 потоков. Документы говорят, что это нормально);

# git push --mirror
Counting objects: 2000, done.
Delta compression using up to 8 threads.
warning: suboptimal pack - out of memory
fatal: inflateInit: out of memory (no message)
error: failed to push some refs to '/home/ggadmin/gg-prod.git'

Я пробовал следующеевещи для решения этой проблемы, но все дают одинаковые результаты;

git repack -adf --window-memory=100m
                                ^ tried running this up to 1024m. Same result.

Даже пытался принудительно нажать, но получил то же самое, только с ошибкой malloc;

# git push -f origin master
Counting objects: 2000, done.
Delta compression using up to 8 threads.
warning: suboptimal pack - out of memory
fatal: Out of memory, malloc failed (tried to allocate 2340 bytes)
error: failed to push some refs to '/home/ggadmin/gg-prod.git'

I 'Я работаю над этим уже 2 дня и перепробовал почти все, что я могу найти в Google и здесь, на SO.

Я пришел в себя, пытаясь исправить это.Пожалуйста, скажите мне, что кто-то там знает, что можно сделать, чтобы сделать эту работу?

Ответы [ 7 ]

16 голосов
/ 05 марта 2012
  1. Может быть, git - неоптимальный инструмент для работы с большим количеством больших объектов.
  2. Вы можете отключить многопоточное сжатие для экономии памяти: git config pack.threads 1 (в дополнение к другим параметрам ограничения памяти, например core.bigfilethreshold в более новом Git)
12 голосов
/ 23 августа 2013

Следующая команда устранила проблему для меня:

git config --global pack.windowMemory 256m

Это влияет на эффективность дельта-сжатия, поэтому вы можете попробовать сначала больший размер, например, 1g, в зависимости от вашего оборудования и пропускной способности.

Подробнее здесь: https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

7 голосов
/ 14 августа 2013
git config --global pack.threads 1
3 голосов
/ 11 декабря 2012

У меня была такая же проблема с git-клоном.Репо было 25GB.Я использовал альтернативную команду, для меня требовался корневой контроль над источником,

rsync -avz -e ssh --progress user@computerName:repo/Directory destination/folder

, после этого я смог зафиксировать и вытащить, как и любой другой репозиторий.

1 голос
/ 30 марта 2018

В моем случае я ранее уменьшил виртуальную память моего сервера до нуля, чтобы удалить файл подкачки, чтобы освободить раздел и увеличить размер основного раздела. Это уменьшило мою рабочую память, и в результате git не смог обработать большие файлы. После увеличения моей виртуальной памяти все снова было отсортировано.

0 голосов
/ 28 октября 2015

Ни один из этих ответов не помог мне. Моя проблема заключалась в том, что мой маленький сервер имеет 1 ГБ оперативной памяти и не имеет SWAP. Я сделал sudo service apache2 stop & sudo service mysql stop + уничтожение одного неиспользованного процесса из htop (после этого я получаю ~ 100 МБ ОЗУ) и git push правильно.

0 голосов
/ 15 августа 2013

Я понимаю, что это немного поздно в игре, но так как некоторые из вышеперечисленных помогли мне (спасибо @Ashitakalax), вот мои два цента.Та же проблема, что и выше (inflateInit: недостаточно памяти) при перемещении изменений из экземпляра Wordpress вверх по течению для тестирования, git прерывает работу из-за недостатка памяти, и это регулярно происходит из-за изменений в каталоге ../uploads/, содержащем файлы изображений.Все это на общем хосте без доступа к глобальной конфигурации git, поэтому мы делаем:

0- in repo: git commit -m "some relevant details"

, чтобы записать изменения

1- rsync -av --progress repo/wp-content/uploads/ test/wp-content/uploads

, чтобы переместить большую часть исправлений образа /изменяет

2- in test: git add -A

для отслеживания новых вещей на тестовой стороне вещей

3- in test: git fetch origin

, теперь извлекает остальное из репо

4- in test: git merge origin/master

и, наконец, объединяется...

Бит rsync облегчает загрузку git и все хорошо.

...