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