Вопрос git: удалить все отслеживаемые файлы?


У меня есть каталог, содержащий git repo, а также другие несвязанные файлы, которые я не хочу отслеживать (мой домашний каталог, извините, если это плохая практика - приветствуются альтернативные рекомендации для профиля bash для версий и vim-файлов!)

Я могу легко удалить каталог .git, но это оставляет меня со всеми отслеживаемыми файлами в моем каталоге. Как удалить все отслеживаемые файлы, чтобы полностью удалить git-репо и соответствующие ему файлы, эффективно «разблокировать» или «удалить»?

Кроме того, после удаления этих файлов, как удалить все каталоги, которые содержали отслеживаемые файлы, но теперь пустые?

Связанный (противоположный вопрос): Git: как удалить все неиспользуемые файлы


6
2018-06-28 13:45


происхождения




ответы:


Для файлов вы можете немного изменить свою командную строку в предлагаемой командной строке на странице git-rm

git ls-files -z | xargs -0 rm -f

Это намного безопаснее с более сложными путями файлов. Для каталогов вы можете попробовать аналогичную стратегию:

git ls-tree --name-only -d -r -z HEAD | sort -rz | xargs -0 rmdir 

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

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


10
2017-07-17 18:11



спасибо за очень полезный ответ. Я полагаю, что если бы я хотел удалить файлы gitignore'd, я мог бы использовать ГИТ-чистый - Ilias Karim
ты мог. Но я думал, что вы можете захотеть сохранить каталоги, в которых были не отслеживаемые файлы. Если вы этого не сделали, вы можете быть более агрессивными относительно удаления каталогов (rm -rf). Причина, по которой я думал, что вы не захотите это сделать, заключается в том, что вы можете просто удалить все файлы, не входящие в каталог .git. - andygavin


Вы можете запросить git для списка всех отслеживаемых файлов с помощью git ls-files, Итак, следующая команда должна работать нормально

git ls-files | xargs rm

1
2018-06-28 14:02



Благодаря! Неплохо, изменено на git ls-files | xargs -r rm он также удаляет подмодули. Но как удалить пустые каталоги, которые содержали отслеживаемые файлы, но теперь пустые? без простого удаления всех пустых каталогов в рабочем каталоге? (Я приложил это к исходному вопросу) - Ilias Karim
например, после запуска этого в моем домашнем каталоге, я остаюсь с пустым каталогом конфигурации vim: .vim/bundle, .vim/colors, а также .vim/syntax - Ilias Karim