Как сжать папку .git

Моя текущая база имеет общий размер ок. 200MB.

Но моя папка .git имеет удивительный размер 5 ГБ (!). Поскольку я перенес свою работу на внешний сервер, мне не нужна большая локальная история...

Как я могу сжать папку .git, чтобы освободить место на моем ноутбуке? Могу ли я удалить все изменения старше 30 дней?

Большое спасибо за любую помощь :)

Ответ 1

вы не должны удалять все изменения старше 30 дней (я думаю, что это как-то возможно использование git, но на самом деле не рекомендуется).

вы можете вызвать git gc --aggressive --prune, который будет выполнять сборку мусора в вашем репозитории и обрезать старые объекты. у вас много бинарных файлов (архивов, изображений, исполняемых файлов), которые часто меняются? обычно они приводят к огромным папкам .git(помните, git хранит моментальные снимки для каждой ревизии, а бинарные файлы плохо сжимаются)

Ответ 2

Вот что говорит создатель git Linus о том, как уменьшить размер вашего git-репо:

Эквивалент "git gc --aggressive" - но сделанный * правильно * - это сделать (в одночасье) что-то вроде

   git repack -a -d --depth=250 --window=250

где эта глубина только о том, насколько глубоки могут быть дельта-цепочки (сделайте их длиннее для старой истории - это стоит пространства), а окно - о том, насколько велико окно объекта, которое мы хотим, чтобы каждый кандидат-дельта сканировал.

И здесь вы, возможно, захотите добавить флаг "-f" (то есть "отбросить все старые дельты"), так как вы сейчас действительно пытаетесь убедиться, что этот действительно находит хороших кандидатов.

источник: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html

Это избавит от бинарных данных, которые осиротели в моем репо? "git repack" не будет избавляться от изображений или двоичных данных, которые вы зарегистрировали в своем репо, а затем удалили. Чтобы навсегда удалить такие данные из вашего репо, вы должны переписать свою историю. Типичный пример этого - случайная проверка ваших паролей в git. Вы можете вернуться и удалить некоторые файлы, но затем вам придется переписать свою историю с этого момента до настоящего времени, а затем принудительно протолкнуть новый репо к вашему источнику.

Ответ 3

Я попробовал это, но мой репозиторий все еще был очень большим. Проблема была в том, что я случайно проверил некоторые сгенерированные большие файлы. После некоторых поисков я нашел отличный учебник, который позволяет легко удалять большие сгенерированные файлы. Этот урок позволил мне уменьшить размер хранилища с 60 МБ до & lt; 1 МБ

Steve Lorek, How to Shrink a Git Repository

Ответ 4

5GB против 200MB немного странно. Попробуйте запустить git gc.

Но нет, если вы не разделили свой репозиторий на модули, вы не можете уменьшить размер каталога .git.

Каждый клон репозитория git представляет собой полноценный репозиторий, который может выступать в роли сервера. Это базовый принцип управления распределенной версией.

Ответ 5

Я использую git больше как механизм синхронизации, чем для истории версий. Поэтому мое решение этой проблемы состояло в том, чтобы убедиться, что у меня есть все мои текущие источники в удовлетворительном состоянии, а затем просто удалить .git и повторно инициализировать репозитории. Задача дискового пространства решена.:-) История ушла:-( Я делаю это, потому что мое репо находится на маленьком USB-ключе. Мне не нужна или нужна вся моя история. Если бы у меня был метод просто обрезания истории, я бы использовал это.

Если бы я был заинтересован в сохранении моей истории, я бы архивировал текущий репозиторий. В какой-то момент позже я смог клонировать исходный репозиторий, скопировать все изменения из новое репо (допустим, что я не сделал много (любого) переименования или удаления). И затем сделайте одно большая фиксация, которая будет представлять все изменения, сделанные в новом репо, как единое целое в старый репо. Можно ли объединить истории? Может быть, если я использовал ветку, а потом удалили объекты, которые мне не нужны. (Я не знаю достаточно о внутренних элементах git, чтобы начать обманывать подобное).

Ответ 6

Испытанные выше методы, в моем случае ничего не работало (где я случайно убил процесс git во время git push), поэтому мне, наконец, пришлось удалить репо и клонировать его снова, и теперь папка .git имеет нормальный размер.