git: Удалить все отслеживаемые файлы?
У меня есть каталог, содержащий репозиторий git, а также другие несвязанные файлы, которые я не хочу отслеживать (это мой домашний каталог, извините, если это плохая практика - альтернативные рекомендации по версионированию профиля bash и файлов vim приветствуются!)
Я могу легко удалить каталог.git, но это оставляет меня со всеми отслеживаемыми файлами в моем каталоге. Как мне удалить все отслеживаемые файлы, чтобы я мог полностью удалить git-репо и связанные с ним файлы, эффективно "отсекая" или "удаляя"?
Кроме того, после удаления этих файлов, как удалить все каталоги, которые раньше содержали отслеживаемые файлы, но теперь они пусты?
Связанный (противоположный вопрос): Git: Как удалить все неотслеживаемые файлы
3 ответа
Для файлов вы можете немного изменить командную строку на предлагаемую командную строку на странице 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), которые не отслеживаются. Приведенная выше командная строка должна оставлять эти файлы и их каталоги.
Но было бы легко изменить это, чтобы удалить каталог, независимо от его содержимого.
Вы можете запросить у git список всех отслеживаемых файлов с помощью git ls-files
, Итак, следующая команда должна работать нормально
git ls-files | xargs rm
Чтобы сделать это более эффективно,
git read-tree -u --reset $(:|git mktree)
или для очков чистоты,
git read-tree -u --reset $(git hash-object -t tree /dev/null)
или даже
git read-tree -u --reset 4b825dc642cb6eb9a060e54bf8d69288fbee4904
любой из них удалит все отслеживаемые файлы и все каталоги, очищенные по пути.