我正在尝试从 git 中删除以前跟踪的目录,这可以工作,但它会在后续的每个目录中添加回来git add .
, git add -A
等等。这是我所做的:
添加到项目根目录中的.gitignore:
node_modules
运行以下命令:
git rm -r --cached node_modules
git commit -a -m "removed node_modules"
git push origin master
到目前为止一切顺利,这将从远程存储库中删除该目录。问题是当我稍后运行时git status
它告诉我 node_modules 目录未被跟踪,并在将来的提交中不断将其添加回来。
我错过了什么和/或如何找到问题的根源?
From here http://git-scm.com/docs/git-add:
git add 命令默认不会添加被忽略的文件。
...
git add 命令可用于通过 -f(强制)选项添加忽略的文件。
来自评论的附加信息:
我正在跟踪 .gitignore 文件。
git check-ignore node_modules/
按预期返回 node_modules/ 。
不使用子模块。
Update:
我创建了一个示例,该示例似乎按照上述步骤复制了该问题:
https://github.com/awhitehouse104/SampleRepo https://github.com/awhitehouse104/SampleRepo
解决:
总结下面的答案和评论,问题出在我的 .gitignore 文件的编码中。我曾经用过echo 'node_modules' > .gitignore
在 Windows 8 上创建该文件,它以带有 BOM 的 UTF-16 形式出现(根据下面的答案)。经过几次谷歌搜索后,这似乎是 powershell 的默认编码,我可以确认保存为 UTF-8 似乎已经解决了问题。
tldr;可能不使用这种创建 .gitignore 文件的方法或准备更改编码
echo 'node_modules' > .gitignore