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目录未被跟踪,并在未来的提交中不断添加它回来。我错过了什么,或者如何找到我的问题的根源?
从这里得到以下信息:
git add命令默认不会添加被忽略的文件。 ... git add命令可以使用-f(强制)选项添加被忽略的文件。
评论中的额外信息:
我正在跟踪.gitignore文件。
git check-ignore node_modules/
按预期返回node_modules/。没有使用子模块。
更新:
我创建了一个样本,似乎可以复制上述步骤中的问题。
https://github.com/awhitehouse104/SampleRepo
解决方案:
总结下面的答案和评论,问题出在我的.gitignore文件编码上。我在Windows 8上使用echo 'node_modules' > .gitignore
创建文件,结果它以UTF-16带BOM的形式呈现(根据下面的答案)。经过几次谷歌搜索,似乎这是powershell的默认编码方式,我可以确认保存为UTF-8似乎已解决了这个问题。
tldr; 可能不要使用此方法创建.gitignore文件,或者准备更改编码方式
echo 'node_modules' > .gitignore