Похоже, мой проект становится все больше и больше с каждым мерзавцем commit/push. Есть ли способ очистить мою папку git?
Похоже, мой проект становится все больше и больше с каждым мерзавцем commit/push. Есть ли способ очистить мою папку git?
Ответы:
Я не уверен, что вы хотите. Прежде всего, конечно, каждый раз, когда вы делаете коммит / push, каталог становится немного больше, так как он должен хранить каждый из этих дополнительных коммитов.
Однако, вероятно, вы захотите, git gcкоторый будет «очищать ненужные файлы и оптимизировать локальный репозиторий» ( страница руководства ).
Другая, возможно, релевантная команда, git cleanкоторая удалит неотслеживаемые файлы из вашего дерева ( страница руководства ).
WARNINGКоманда, как написано выше @Kalle, удалит ВСЕ > ФАЙЛ И СПРАВОЧНИК В СВОЕМ GIT ROOT , а не только «файлы, перечисленные в .gitignore». Все, что не отслеживается Git, независимо от того, включено ли оно в список, .gitignoreбудет удалено. git clean -dfX(обратите внимание на регистр на X) удалит только те элементы, для которых применимо правило .gitignore. Пожалуйста, обратите внимание на это предупреждение: Никогда не запускайте его, git cleanне запуская его в интерактивном режиме, -iвместо того -f, чтобы , по крайней мере, сначала выполнить пробный прогон, -nа затем снова с -f.
Бегать:
git remote prune origin
Удаляет все устаревшие ветви отслеживания, которые уже были удалены, originно все еще доступны локально в remotes/origin.
git gc --auto
' G arbage C ollection' - выполняет хозяйственные задачи (сжимает ревизии, удаляет незакрепленные / недоступные объекты). --autoФлаг первым определяет, требуется ли какая - либо работа, и выходит , не делая ничего , если нет.
Один из сценариев , где ваш мерзавец репо получит серьезно больше с каждой фиксации является один , где вы совершаете двоичные файлы , которые вы регулярно генерировать. Их хранение не будет таким же эффективным, как у текстового файла .
Другой - тот, где у вас есть огромное количество файлов в одном репо (что является пределом git ) вместо нескольких подпереговоров ( управляемых как подмодули ).
В этой статье о git space AlBlue упоминает:
Обратите внимание, что Git (и Hg, и другие DVCS) страдают от проблемы, когда (большие) двоичные файлы регистрируются, а затем удаляются, так как они все равно будут отображаться в репозитории и занимать место, даже если они не являются текущими ,
Если в вашем git-репозитории хранятся большие двоичные файлы, вы можете рассмотреть следующие вопросы:
git filter-branch (предупреждение: это перезапишет историю, что плохо, если вы уже открыли репо и другие извлекли из него)Как я уже говорил в « Каковы пределы файлов в Git (количество и размер)? », Тем более в последнее время (2015, через 5 лет после этого ответа) Git LFS из GitHub является способ управления этими большими файлами (сохраняя их вне Git репозиторий).
да да git gc это решение, естественно,
и локально - вы можете просто удалить локальный репозиторий и снова его клонировать,
секунды, в течение которых вы ожидаете обработки этого огромного Git & Externals, превращаются в долгие минуты, которые собираются в часы неэффективного затраченного времени,
Создайте новый (полностью, а не просто ветвь) репозиторий с нуля , включая единственную последнюю версию файлов, естественно, вы потеряете всю историю,
но когда в мире кода не настало время сентиментальности, нет смысла тащить весь 5-летний код каждый коммит или разность, вы все равно можете хранить старые git & externals где-нибудь, если вы испытываете ностальгию:]
но в какой-то момент вы действительно должны двигаться дальше:]
ваша команда поблагодарит вас!
Выполнение этой команды чрезвычайно опасно, но сократит ваш репозиторий, удалив все ваши файлы git recovery / backup:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Он удалит все файлы, которые использует git для восстановления вашего репозитория по какой-то неправильной команде, например, если вы это сделали git reset --hard, вы обычно можете восстановить потерянные файлы. Но если вы делаете git reset --hardдо git reflog expire...команды, то вы все потеряли. Теперь ваша единственная надежда - использовать какой-нибудь инструмент, который анализирует вашу файловую систему и пытается восстановить стертые файлы, если они не были переопределены.
git clean -d -f -i это лучший способ сделать это.
Это поможет сделать уборку более контролируемой.
-i обозначает интерактивный.
git cleanне об очистке репо, а об очистке каталога. Для пользователей, которые слепо копируют / вставляют, будьте осторожны; это удаляет неотслеживаемые файлы / каталоги, которые вы могли бы на самом деле хотеть локально.
Не знаю, уменьшит ли он это, но после запуска git cleanя часто так и делаю git repack -ad, что уменьшает количество файлов пакета.
git gcпроцесса, поэтому нет необходимости запускать ее отдельно