Git难题:rm -r和.gitignore无法正常工作

时间:2014-03-31 12:41:41

标签: git

我刚将以下行添加到.gitignore

*.pyc

1)然后我运行了命令

git rm -r --cached *.pyc

但是它没有递归地工作,而是我得到了错误fatal: pathspec 'RepoName.pyc' did not match any files

2)更糟糕的是,当我下次尝试

git add .

由于.gitignore而通常未添加的所有文件都已暂存以进行提交。然后我删除了*.pyc行,但这种行为仍在继续。

有谁知道发生了什么事?

注意:

运行git status时,我没有看到“通常被忽略”的文件为未跟踪文件。

1 个答案:

答案 0 :(得分:3)

Shell通配符不能递归工作。在执行Got之前,它们在shell的当前目录的上下文中展开。你需要像

这样的东西
 ls-files --other --ignored --exclude-standard -z | xargs -0 git rm --cached

选项说明:

  • ls-files --other --ignored --exclude-standard显示应忽略的文件。

  • -z使用NUL(\0)分隔符进行输出,以避免文件名中出现空格问题。

  • xargs -0为从stdin读取的每个NUL分隔记录运行下一个命令。

  • git rm --cached仅从索引中删除,而不是从工作树中删除。