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

Папка .git разрослась до 5гб.
Хочу уменьшить ее размер, т.к. не могу клонировать нормально.
Делал:
git repack -a -d --depth=250 --window=250
git clean -d -f -i
git remote prune origin

Но это не принесло результата.
Как ее уменьшить? Или как удалять коммиты старше к примеру 30 дней? Возможно ли это?
  • Вопрос задан
  • 1739 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Вы явно делаете что-то не так, раз репо занимает столько места. Уточните, что вы там храните?
Стандартные процедуры сборки мусора и перепаковки не сильно помогут. Надо удалить лишнее руками.
Либо тупо обрезать старую историю и использовать текущее состояние проекта как начало новой истории.
git reset $(git commit-tree HEAD^{tree} -m "Новое начало истории")

Затем сделать сборку мусора
git gc --prune=now --aggressive

Но если старую историю не хочется терять, то есть рецепт с разбивкой репозитория на два. В первом будет вся старая история, а во втором вы продолжите работу над новыми фичами и сможете его легко клонировать, если не продолжите засорять мусором.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev Куратор тега Git
software engineer
1. git хранит всю историю. Но встроенный garbage collector может удалять коммиты, которые не привязаны ни к какой ветке. Поэтому для начала:
* Удалите ненужные бренчи.
* Выполнте "git gc --aggressive --prune" после удаления бренчей.

2. Затем нужно разобраться с тем, что у вас занимает место. Если вы напихали крупных файлов в ваш гит репо и они присутствуют в активном бренче, то никак их не удалить. Точнее можно попробовать удалить сами файлы вручную или при помощи bfg-repo-cleaner, но при этом надо синхронизировать это со всеми участниками. Если у вас гит репо локальный и никто им не пользуется, это проще. Но при этом вы ломаете коммиты - откатиться на них уже будет нельзя.

3. Наконец следует потратить вечерок и почитать про git-flow, или даже посмотреть 3-4 ютуб ролика от разных авторов которые показывают разные флоу работы с гитом. Там вы поймете почему и зачем люди пользуются rebase, squash, зачем удаляют ненужные ветки и содержат dev/master в хорошем состоянии, когда там нет промежуточных коммитов с commit message типа "апечатка" "забыл" "еще" и подобного мусора. И гит репо занимает минимальный объем.
Ответ написан
Комментировать
Комментировать
paran0id
@paran0id
Умный, но ленивый
Бинари поди храните? Или библиотеки-зависимости выкачиваете и по git add . добавляете каждый раз? Выясните, что жрёт место, настройте gitignore, почитайте про git lfs.
Ответ написан
Комментировать
Griboks
@Griboks
Никак. Git придумали для других целей. Поэтому всё, что вы можете, - это удалить историй либо даже проще пересоздать репозиторий
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы