Невозможно удалить файлы рекурсивно из Git

Я хочу удалить все файлы из Git в ~/bin/.

Я запустил

git rm -r --cached ~/.vim/*                      # Thanks to Pate in finding --cached!

Я получаю

fatal: pathspec '.vim/colors' did not match any files

Эта ошибка messsage предлагает мне использовать следующие PATH, так как ~/.vim/** не работает

~/.vim/*        # I get the error
~/.vim/*/*/*    # This removes files from the index at ~/.vim/folderA/folderB/file1.txt
~/.vim/*/*      # similar error as to the first PATH

Как удалить все файлы и подкаталоги в ~/.vim из Git?

-

Ответы

Ответ 1

 git rm -r --cached ~/.vim/*   
 fatal: pathspec '.vim/colors' did not match any files

1/Вам не нужно '*':

 git rm -r --cached ~/.vim

позаботится о любых отслеживаемых подфайлах.

2/fatal: pathspec '.vim/colors' did not match any files просто означает, что одна из ваших команд, которые вы пытались, до того, как она была указана в файле 1/, работала, и больше нет файла для удаления!

# to test that command, first reinitialize the state of the repository
# save first if you have any other current modifications
$ git reset --hard

# then check the rm works
$ git rm -r --cached ~/.vim
rm '.vim/aPath/aFile1'
rm '.vim/aSecondPath/aFile2'
rm '.vim/aThirdPath/aFile3'

# try it again
$ git rm -r --cached ~/.vim
fatal: pathspec '.vim/colors

Ответ 2

Вы хотите удалить их, даже если есть локальные изменения?

git rm -rf bin/*

Или вы хотите удалить из индекса, но сохранить сами файлы?

git rm -r --cached bin/*

Также попробуйте:

git help rm

Ответ 3

Или может быть, что каталог, который вы пытаетесь рекурсивно удалить, находится в списке .gitignore. Я просто столкнулся с этим. У меня есть. /vendors в моем списке игнорирования, и есть куча каталогов в. /vendors, но поскольку ничего в вендорах игнорируется, оно фактически не удаляет что-либо вроде. /vendors/assetic, потому что это не на самом деле в репо. Я забыл, что это было в списке игнорирования:)

Ответ 4

Вы должны понять, что * делает бит первым.

Приложения не видят * (или другие символы подстановки) - они получают все совпадения glob как отдельные аргументы.

Чтобы понять это лучше, поставьте echo перед первой командой и посмотрите, что она печатает:

 git rm -r --cached ~/.vim/*

Вы увидите каждое отдельное совпадение, в том числе то, что программа не знает, как работать (включая .vim/colors).