Работа с изменениями

Удаление неотслеживаемых файлов

В рабочем дереве копятся файлы, копию которых git никогда не делал: черновая заметка, debug-output.txt, dist/ от упавшей сборки, node_modules из ветки, которую вы бросили в прошлом месяце. У git есть для этого одна команда — git clean — и это единственная git-операция, за которой не стоит ничего. Содержимое никогда не было в коммите, значит нет ни записи в reflog, ни стеша, ни отмены, ни заклинания git, которое вернуло бы всё назад.

Именно поэтому это та операция, которую люди запускают в терминале и потом жалеют. Версия Gitcito показывает весь список до того, как что-либо произойдёт.

⌘K → Удалить неотслеживаемые файлы.

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

Что означает список

Каждая запись — путь, до которого мог бы добраться git clean, с размером на диске, в двух группах:

Группа Что это Выбрано по умолчанию
Неотслеживаемые Никогда не коммитились, не попадают под .gitignore Да
Игнорируемые Попадают под .gitignore — результаты сборки, кеши, .env Нет

В этом разделении весь смысл. Игнорируемые пути обычно ничего не стоят — и время от времени оказываются единственной копией чего-то важного: локального .env, дампа базы, скачанной фикстуры. Ничто, что попадает под .gitignore, никогда не выбирается за вас.

Полностью неотслеживаемый каталог — это одна строка, а не по строке на файл — tmp/, dist/, node_modules/ — потому что именно с такой гранулярностью git их удаляет, а список из 40 000 файлов не читает никто. Его размер — сумма того, что внутри.

Папка, помеченная как собственный репозиторий, имеет свой .git: клон, который вы уронили внутрь этого, или эксперимент, который вы так и не подключили. Git отказывается их удалять (ему нужен -ff, флаг, которого Gitcito не предлагает) — их забирает Корзина.

Корзина или удаление

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

Если это выключить, будет выполнен настоящий git clean -f -d -x ровно по выбранным путям, с запросом подтверждения, в котором перед вами количество и общий размер. После этого не восстанавливается ничего.

Ограничения, о которых стоит знать

  • Только неотслеживаемые файлы. Изменённого отслеживаемого файла здесь нет — это Отмена изменений, которая восстанавливает его из индекса или из HEAD.
  • Список ограничен первыми 400 путями. Если в репозитории их больше, удалите перечисленное и нажмите Пересканировать для остального.
  • Размеры каталогов приблизительны для очень больших деревьев: сканирование останавливается после 20 000 файлов, поэтому гигантский node_modules может выглядеть меньше, чем он есть. Больше — никогда.
  • Сканирование — это снимок. Если во время открытого диалога сборка пишет файлы, нажмите Пересканировать, прежде чем что-либо удалять.
  • Пути сверяются с собственным списком удаляемых файлов git до того, как что-нибудь будет тронуто, так что ничего отслеживаемого через этот диалог удалить нельзя даже по имени.

См. также: Индексация и отмена изменений · Игнорирование файлов · Удаление файла из истории

Улучшить этот перевод на GitHub