Как сжать папку .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 имеет нормальный размер.