.gitignore无法忽略未跟踪的文件和文件夹
我遇到了一个与这个 this 的回答相关的问题类似的情况,但这里的答案并未解决我的问题。为了排查问题,我在一个新的文件夹中创建了一个新的git仓库,但在阅读了链接中的回答并查看教程和git文档后,还是有些地方没有按预期工作。我在Windows 11机器上使用VS Code内置的PowerShell(版本5;构建26100)终端运行。Git已在TestRepo1文件夹中初始化,结构如下:
TestRepo1\
| .gitignore
| logs\
| | dev.log
我的.gitignore文件包含以下内容:
logs/
*.log
除了 .gitignore 之外,其他的从未被跟踪过。保存 .gitignore 之后,尚未对其进行首次暂存,我执行了 git status,结果 .gitignore 和 logs/ 都被列为未跟踪。我 git add .gitignore,随后执行 git status,logs/ 仍然显示为未跟踪。提交.gitignore之后没有变化(见截图)。我还尝试将 logs\ 添加到 .gitignore,但同样无效。
使用 git status --ignored 时没有显示被忽略的内容。git check-ignore 文档提到一个 core.excludesfile,据我所知似乎没有设置。在 .gitconfig 的我的用户配置里,我设置了用户名和邮箱;核心变量设置为editor和 autocrlf。
我刚刚执行 git show HEAD:.gitignore 来检查 .gitignore 的当前状态,得到的结果与第二张截图所示相同,例如对于 logs/ 的 .gitignore 条目,它显示为 <FE><FE>l^@o^@g^@s^@/^@^M^@。这些额外的字符是什么?难道正是正是它们在干扰.gitignore的工作吗? 
看起来我偶然发现了回答 [strange characters in git] 和 [Unicode (utf-8) with git bash]。我把 .gitignore 保存为UTF-8编码。
似乎我的VS Code设置默认是UTF-8,但PowerShell的默认编码是UTF-16 LE。是不是因为PowerShell版本5.1的原因?我打算把这个问题标为已解决,并可能再发一个关于PowerShell设置的新问题。
.gitignore 现在可以正常工作了。感谢大家。
解决方案
你不需要先提交.gitignore才能让它生效。Git会从工作树读取.gitignore文件。
在你的示例中,似乎有几个打字错误:
git add .gitinore
应该是:
git add .gitignore
你提到的是labs/,而你帖子中显示的目录是logs/。我会先核实实际的文件和文件夹名称: