Почему мой репозиторий Git намного больше, чем версия Mercurial? - PullRequest
13 голосов
/ 07 августа 2011

Я конвертировал репозиторий Mercurial в Git, используя быстрый экспорт.Но репозиторий Git огромен: 18 ГБ для Git против 3,4 ГБ для Mercurial.Ни один из моих шагов по очистке не помог.

В моем хранилище Mercurial преобладает один файл размером 65 МБ (карточки Anki в формате SQLite), который обновляется ежедневно.Его история выросла до 2,9 ГБ в каталоге .hg / store / data.

Я надеялся, что Git сможет сжать историю немного лучше, но мне не удалось сжать хранилище ниже 18 ГБ.!

Я пробовал git prune, git gc и другие, но безрезультатно.Я даже попытался сжать папку .git, и она все равно оказалась размером 18 ГБ.

Я что-то упустил?

Обновление: Я попробовал Bazaar (bzr), и это сжало мой репозиторий только до 2,3 ГБ.Ницца!

Ответы [ 3 ]

9 голосов
/ 07 августа 2011

Одной из причин может быть то, что Mercurial имеет очень компактный формат хранения, который включает в себя различия, даже для двоичных файлов. А поскольку использование diff-файлов для повторного создания версий может занять очень много времени, он сохранит полный снимок, как только diffs + old оригинал превысит вдвое размер полного снимка.

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

Я не знаю, каков формат хранения git. Но я предполагаю, что он не использует различия так же, как и Mercurial.

7 голосов
/ 07 августа 2011

Если git gc не работает, попробуйте вручную запустить git repack, а затем git gc.


Мои наблюдения с SVN, Git и Hg:

Я всегда замечал, что SVN и Hg-репозитории были намного меньше, чем соответствующие git-репозитории. Это потому, что каждое изменение в файле - текстовом или двоичном, добавляет новый полный объект для него. В SVN добавляется только diff, даже в случае двоичных файлов, и двоичное различие в SVN также очень хорошее.

Но именно здесь приходят файлы пакета, поскольку они хранят только diff (delta) среди похожих объектов и даже сжимаются. Я заметил, что даже с упаковкой Git-репозитории, в зависимости от типа файлов и количества изменений, которые претерпевают эти файлы, имеют тенденцию быть больше. Это то, что я решил принять с Git, и это компромисс, который я готов принять, учитывая, насколько быстро выполняются различные операции с Git.

0 голосов
/ 18 сентября 2017

Запуск git gc --aggressive в репозитории, перенесенном из Mercurial, работал для меня.Он уменьшен с 500 МБ до 150 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...