как сжать папку .git - PullRequest
       3

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

102 голосов
/ 10 апреля 2011

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

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

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

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

Ответы [ 6 ]

82 голосов
/ 10 апреля 2011

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

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

51 голосов
/ 13 декабря 2011

Вот что говорит создатель 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. Вы можете вернуться и удалить некоторые файлы, но затем вам придется переписать свою историю с этого момента до настоящего времени, а затем принудительно нажать затем новое хранилище в вашем источнике.

17 голосов
/ 02 января 2015

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

http://stevelorek.com/how-to-shrink-a-git-repository.html

8 голосов
/ 10 апреля 2011

5ГБ против 200МБ довольно странно. Попробуйте запустить git gc.

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

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

2 голосов
/ 10 апреля 2011

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

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

0 голосов
/ 20 мая 2019

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

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