[devel] git usage question
Alexey Morozov
=?iso-8859-1?q?morozov=5Fml_=CE=C1_ngs=2Eru?=
Пт Янв 16 10:20:13 MSK 2009
Здравствуйте!
Столкнулся тут с тем, что не могу обновить репозиторий с qt4
(http://git.altlinux.org/people/zerg/packages/?p=qt4.git;a=summary). У меня
имеется клон этого репозитория примерно годовой давности, там нет ни одного
моего коммита, и при попытке сказать git pull / git fetch в консоль выпадает
следующее:
remote: Counting objects: 418, done.
remote: fatal: Out of memory, malloc failed
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
Получив этот репозиторий другим способом (хе-хе, 300-500 Mb траффика в наше
суровое время - фигня, не так ли?), попытался разобраться, в чём же его,
репозитория, непорядок.
Выяснилось, что git pack-objects, который, насколько я понимаю, участвует в
создании thin-pack'а, быстро дорастает до 2 гигов памяти и, соответственно,
отчаливает в мир счастливых программ и отсутствия каких-либо хардварных
ограничений.
В ходе короткого гугления выяснилось, что такое может быть, если в репозитории
одновременно присутствуют и большие объекты и большое количество мелких.
Такую проблему в ряде случаев можно обойти при помощи
указания --window-memory, но, понятное дело, не в этом. В качестве решения
предлагалось перейти к "констистентным" репозиториям.
Действительно, после "конвертации" репозитория в форму, когда сорцы qt лежат
не в форме цельных .tar'ов, а в развернутом виде, данная проблема исчезает.
Более того, размер репозитория (.git/) уменьшается с 327Mb до 191 при полном
сохранении истории изменений, и становится возможным запустить git
gc --aggressive. Время подготовки .src.rpm из репозитория при таком способе
практически не изменяется (подавляющую часть времени, около минуты, у меня
отрабатывает rpmbuild, то есть, .tar'ы к тому моменту уже созданы).
Соответственно, возникает вопрос: а не следует ли рекомендовать в правилах
использования git'а (git.alt'а) класть в репозиторий раскрытые архивы, а
не .tar'ы.
С уважением,
Алексей Морозов
Подробная информация о списке рассылки Devel