Есть ли способ убрать мерзавца? - PullRequest
141 голосов
/ 25 июня 2010

Похоже, мой проект с каждым шагом становится все больше и больше commit/push. Есть ли способ очистить мою папку git?

Ответы [ 7 ]

205 голосов
/ 25 июня 2010

Я не уверен, что вы хотите.Прежде всего, конечно, каждый раз, когда вы делаете коммит / толкаете, каталог становится немного больше, поскольку он должен хранить каждый из этих дополнительных коммитов.

Однако, вероятно, вы хотите git gc, который будет "очистить ненужные файлы и оптимизировать локальный репозиторий "( страница справочника ).

Другая, возможно, соответствующая команда - git clean, которая удалит неотслеживаемых файлов из вашего дерева ( страница справочника ).

47 голосов
/ 26 февраля 2013

Пробег:

git remote prune origin

Удаляет все устаревшие ветви отслеживания, которые уже были удалены в origin, но все еще доступны локально в remotes/origin.

git gc --auto

' G arbage C ollection' - выполняет служебные задачи (сжимает ревизии, удаляет незакрепленные / недоступные объекты). Флаг --auto сначала определяет, требуется ли какая-либо работа, и завершает работу, если ничего не делает.

25 голосов
/ 25 июня 2010

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

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

В этой статье о пространстве git , AlBlue упоминает:

Обратите внимание, что Git (и Hg, и другие DVCS) страдают от проблемы, когда (большие) двоичные файлы регистрируются, а затем удаляются, так как они все равно будут отображаться в хранилище и занимать место, даже еслиони не текущие.

Если в вашем git-репозитории хранятся большие двоичные файлы, вы можете рассмотреть следующие вопросы:

20 голосов
/ 07 января 2016

да да, git gc это решение, естественно,

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

но здесь есть кое-что более важное ...

секунд, в течение которых вы ожидаете обработки этого огромного Git & Externals, накапливаются долгие минуты, в которые накапливаются часы, потраченные неэффективно,

Создайте новый (полностью, а не просто ветвь) репозиторий с нуля , включая только последнюю версию файлов, естественно вы потеряете все история,

но когда в мире кода не время становиться сентиментальным, нет смысла тащить весь 5-летний код за каждый коммит или разность, вы все равно можете хранить старые git & externals где-нибудь, если вы испытываете ностальгию:]

но в какой-то момент вам действительно нужно двигаться дальше:]

ваша команда поблагодарит вас!

9 голосов
/ 19 июня 2014

git clean -d -f -i - лучший способ сделать это.

Это поможет сделать уборку более контролируемой.

-i обозначает интерактив.

8 голосов
/ 08 сентября 2018

Выполнение этой команды чрезвычайно опасно, но сократит ваш репозиторий, удалив все ваши файлы git recovery / backup:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

Он сотрет все файлы, которые использует git для восстановления вашего репозитория по какой-то неверной команде, например, если вы сделали git reset --hard, вы обычно можете восстановить потерянные файлы. Но если вы выполните git reset --hard перед командой git reflog expire..., вы потеряли все. Теперь ваша единственная надежда - использовать какой-либо инструмент, который анализирует вашу файловую систему и пытается восстановить удаленные файлы, если они не были переопределены.

2 голосов
/ 14 мая 2015

Не знаю, уменьшит ли оно это, но после запуска git clean я часто также делаю git repack -ad, что уменьшает количество файлов пакета.

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