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

любой из них удалит все отслеживаемые файлы и все каталоги, очищенные по пути.

Другие вопросы по тегам