关于rm:无法从Git递归删除文件

Unable to remove files recursively from Git

我想删除git中位于~/bin/的所有文件。

我跑

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

我得到

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

此错误message建议我使用以下路径,因为~/.vim/**不起作用

1
2
3
~/.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

如何从git中删除~/.vim处的所有文件和子目录?

——


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

1/您不需要"EDOCX1"〔0〕:

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

将处理所有跟踪的子文件。

2/EDOCX1[1]只是指您在1/中列出的命令生效之前尝试过的命令之一,并且没有其他文件可删除!

1
2
3
4
5
6
7
8
9
10
11
12
13
# 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


是否要删除它们,即使存在本地修改?

1
git rm -rf bin/*

还是要从索引中删除但保留文件本身?

1
git rm -r --cached bin/*

同时尝试:

1
git help rm


或者可能是您试图递归删除的目录在.gitignore列表中。我刚刚遇到这个。我的忽略列表中有./vendors,在./vendors下有许多目录,但是因为忽略了vendors中的任何内容,所以实际上它不会删除类似./vendors/assetic的内容,因为它实际上不在repo中。我忘了它在忽略列表中:)


你应该先了解一下*的作用。

应用程序看不到*或其他全局化字符——它们接收全局的所有匹配作为单个参数。

为了更好地理解这一点,把echo放在第一个命令前面,看看它打印了什么:

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

您将看到每个单独的匹配,包括程序不知道如何操作的内容(包括.vim/colors)。