Невозможно рекурсивно удалить файлы из Git - PullRequest
31 голосов
/ 28 июня 2009

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

Я бегу

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

Я получаю

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

В этом сообщении об ошибке предлагается использовать следующие 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?

-

Ответы [ 4 ]

37 голосов
/ 28 июня 2009
 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
10 голосов
/ 28 июня 2009

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

git rm -rf bin/*

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

git rm -r --cached bin/*

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

git help rm
1 голос
/ 18 августа 2012

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

0 голосов
/ 29 июня 2009

Вы должны понимать, что * делает сначала.

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

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

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

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

...