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

Git push - субоптимальный пакет - из памяти

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

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

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

Я сделал фиксацию недавно добавленной базы файлов. Пошел красиво и чисто. Когда я делал master-источник git push, но он продолжает давать мне это (обратите внимание, что у меня 8 процессоров, следовательно, 8 потоков. Docs говорят, что это нормально);

# 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'

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

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

4b9b3361

Ответ 1

  • Может быть git является субоптимальным инструментом для обработки большого количества больших блоков.
  • Вы можете отключить многопоточное сжатие для сохранения памяти: git config pack.threads 1 (в дополнение к другим параметрам ограничения памяти, например core.bigfilethreshold в новом Git)

Ответ 2

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

git config --global pack.windowMemory 256m

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

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

Ответ 3

git config --global pack.threads 1

Ответ 4

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

rsync -avz -e ssh --progress [email protected]:repo/Directory destination/folder

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

Ответ 5

Я понимаю, что это немного поздно в игре, но поскольку некоторые из вышеперечисленных помогли мне (спасибо @Ashitakalax), вот мои два цента. Та же проблема, что и выше (inflateInit: out of memory) при перемещении изменений из экземпляра Wordpress dev вверх по течению, git прерывает работу с нехваткой памяти, и это происходит регулярно из-за изменений в каталоге.. /uploads/, содержащих файлы изображений. Все это на общем хосте без доступа к глобальному config 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 и все хорошо.

Ответ 6

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