Похоже, мой проект становится все больше и больше с каждым git commit/push
. Есть ли способ очистить папку git?
Есть ли способ очистить git?
Ответ 1
Я не уверен, чего ты хочешь. Прежде всего, конечно, каждый раз, когда вы совершаете/толкаете, каталог будет немного больше, так как он должен хранить каждую из этих дополнительных коммитов.
Однако, возможно, вы хотите git gc
, который будет "очищать ненужные файлы и оптимизировать локальный репозиторий" (страница руководства).
Другой возможной командой является git clean
, которая будет удалять необработанные файлы с вашего дерева (
Ответ 2
Запуск:
git remote prune origin
Удаляет все ветки отслеживания, которые уже были удалены в origin
, но все еще доступны локально в remotes/origin
.
git gc --auto
' G arbage C ollection' - выполняет домашние задания (сжимает ревизии, удаляет свободные/недоступные объекты). Флаг --auto
сначала определяет, требуется ли какая-либо работа, и выходит, не делая ничего, если нет.
Ответ 3
Один сценарий, в котором ваш репозиторий git будет становиться все более серьезным с каждой фиксацией, - это тот, где вы произвольно создаете двоичные файлы. Их хранилище будет не так эффективно, как текстовый файл.
Другим является тот, где у вас есть огромное количество файлов в пределах одного репо (который является предел git) вместо нескольких подпоров (управляются как подмодули).
В этой статье на git пространстве, AlBlue упоминает:
Обратите внимание, что git (и Hg и другие DVCS) действительно страдают от проблемы, когда (большие) двоичные файлы проверяются, а затем удаляются, поскольку они все равно будут отображаться в репозитории и занимать место, даже если они не текущие.
Если у вас есть большие двоичные файлы, хранящиеся в вашем репозитории git, вы можете подумать:
- управление этими двоичными файлами в внешнем репозитории.
- управлять размером репозитория .git
- попробуйте удалить эти двоичные файлы из вашей истории с помощью
git filter-branch
(предупреждение: это приведет к перезаписи истории, что плохо, если вы уже нажали свое репо и если другие вытащили из него)
Ответ 4
да да, git gc
- это решение, естественно,
и локально - вы можете просто удалить локальный репозиторий и снова клонировать его,
, но здесь есть что-то более важное...
секунды, в течение которых вы ожидаете, что огромные git и внешние процессы будут обработаны, будут собраны до длинных минут, в которые собираются часы с неэффективным временем,
Создайте новый (полностью, а не только филиал) репозиторий с нуля, включая только последнюю версию файлов, естественно, вы потеряете всю историю,
но когда в коде-мире не время для сентиментальности, нет смысла перетаскивать по всем 5 годам кода каждый фиксатор или diff, вы все равно можете хранить старый git и externals где-нибудь, если вы получаете ностальгию:]
но в какой-то момент вам действительно нужно двигаться вперед:]
Ваша команда поблагодарит вас!
Ответ 5
git clean -d -f -i
- лучший способ сделать это.
Это поможет очистить более контролируемым образом.
-i
означает интерактивность.
Ответ 6
Выполнение этой команды чрезвычайно опасно, но сжимает ваш репозиторий, удаляя все ваши файлы восстановления/резервного копирования git:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Он удалит все файлы, используемые git для восстановления вашего репозитория из какой-либо плохой команды, например, если вы git reset --hard
, вы можете обычно восстановить потерянные файлы. Но если вы git reset --hard
до того, как команда git reflog expire...
, вы потеряли все. Теперь вам остается только использовать какой-либо инструмент, который анализирует вашу файловую систему и пытается восстановить стертые файлы, если они не будут переопределены.
Ответ 7
Не знаю, будет ли это сокращаться, но после запуска git clean я часто делаю "git repack -ad", что уменьшает количество файлов пакетов.