Моя текущая база имеет общий размер ок. 200MB.
Но моя папка .git имеет потрясающий размер - 5 ГБ (!). Поскольку я отправляю свою работу на внешний сервер, мне не нужна большая локальная история ...
Как уменьшить размер папки .git, чтобы освободить место на моем ноутбуке? Могу ли я удалить все изменения старше 30 дней?
большое спасибо за любую помощь :)
git count-objects -v
?Ответы:
вы не должны удалять все изменения старше 30 дней (я думаю, что это как-то возможно с использованием git, но на самом деле не рекомендуется).
вы можете вызвать
git gc --aggressive --prune
, который выполнит сборку мусора в вашем репозитории и удалит старые объекты. у вас много бинарных файлов (архивов, изображений, исполняемых файлов), которые часто меняются? они обычно приводят к огромным папкам .git (помните, git хранит снимки для каждой ревизии, а двоичные файлы плохо сжимаются)источник
git gc --aggressive
это считается плохой практикой. Лучше использоватьgit repack -a -d --depth=250 --window=250
.git gc --aggressive
вызывает repack с размером окна 250 (см. man-страницу) и глубиной 250 (см. исходный код). --aggressive дополнительно добавляет-f
переключатель, чтобы отбросить и повторить все предыдущие операции дельты (как также упоминалось в ссылке)git gc --aggressive --prune
уменьшило это до 19 МБ.--prune
также не является необходимым, поскольку он стал значением по умолчанию сv1.5.5-rc0
(commit 25ee973 , март 2008 г.).Вот что говорит создатель git Линус о том, как уменьшить размер репозитория git:
источник: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
Избавится ли это от потерянных двоичных данных в моем репо? "git repack" не будет избавляться от изображений или двоичных данных, которые вы зарегистрировали в своем репозитории, а затем удалили. Чтобы навсегда удалить такие данные из репо, вам нужно переписать свою историю. Типичным примером этого является случай, когда вы случайно проверяете свои пароли в git. Вы можете вернуться и удалить некоторые файлы, но тогда вам придется переписать свою историю с того момента до настоящего момента, а затем принудительно отправить новое репо в свое происхождение.
источник
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
локального выполнения , выполнения фиксации и нажатия, будет ли сжатие также удалено?Я пробовал их, но мой репозиторий все еще был очень большим. Проблема заключалась в том, что я случайно проверил некоторые сгенерированные большие файлы. После некоторого поиска я нашел отличное руководство, которое позволяет легко удалять большие сгенерированные файлы. Этот учебник позволил мне уменьшить размер моего репозитория с 60 МБ до <1 МБ.
источник
5 ГБ против 200 МБ - это как-то странно. Попробуйте запустить
git gc
.Но нет, если вы не разделите свой репозиторий на модули, вы не сможете уменьшить размер
.git
каталога.Каждый клон репозитория git - это полноценный репозиторий, который может действовать как сервер. Это основной принцип распределенного контроля версий.
источник
Я использую git больше как механизм синхронизации, чем для истории версий. Итак, мое решение этой проблемы заключалось в том, чтобы убедиться, что все мои текущие источники находятся в удовлетворительном состоянии, а затем просто удалить .git и повторно инициализировать репозитории. Проблема с дисковым пространством решена. :-) История ушла :-( Я делаю это, потому что мое репо находится на маленьком USB-ключе. Мне не нужна и не нужна вся моя история. Если бы у меня был метод простого усечения истории, я бы использовал его.
Если бы меня интересовало сохранение моей истории, я бы заархивировал текущий репозиторий. В какой-то момент позже я смогу клонировать исходный репозиторий, скопировать все изменения из нового репозитория (предположим, я не делал много (каких-либо) переименований или удалений). А затем сделайте одну большую фиксацию, которая будет представлять все изменения, сделанные в новом репо, как одну фиксацию в старом репо. Можно ли слить истории? Может быть, если бы я использовал ветку, а затем удалил ненужные мне объекты. (Я недостаточно знаю о внутреннем устройстве git, чтобы начать так дурачиться).
источник
Попробовал описанные выше методы, в моем случае ничего не сработало (когда я случайно убил процесс git во время git push), поэтому мне, наконец, пришлось удалить репо и снова клонировать его, и теперь папка .git имеет нормальный размер.
источник