跳至主要內容

.gitignore 不起效?或许是字符编码在搞鬼!

Bob YueWindowsGitPowerShell字符编码 (encoding).gitignore大约 1 分钟

[血泪教训]如果你的 .gitignore 出现了问题,请尝试本文的检查流程。

背景

昨天在搭建本网站时,Git 爆出了 10K+ 更改。我检查发现已经把 node_modules 等加入了 .gitignore 中,而这些文件却都被标记为 Untracked 状态;更迷惑的是 VS Code 却还建议我将 node_modules 加入其中。

VS Code 给出的提示信息

Git 仓库“...”中存在大量活动更改,将仅启用部分 Git 功能。
是否要将“node_modules”添加到 .gitignore?

花费大量时间反复排查,最后发现是编码问题。

解决

通过 gitignore - Git ignore files still listed in untracked list - Stack Overflowopen in new window,我发现我此处的 .gitignore 文件居然是 UTF-16 LE 编码。更改为 UTF-8 编码后,问题立即解决了。

追溯

我的大部分环境默认编码向来是 UTF-8,之所以发生这样的问题,是因为我的 .gitignore 文件是通过 PowerShell 直接建立的:

echo 'node_modules' >> .gitignore
echo '.temp' >> .gitignore
echo '.cache' >> .gitignore

我并不能确定 PowerShell 默认编码设置为 UTF-16 LE 是否是我的个人问题。根据下面这些问答,这似乎是普遍情况。

上次编辑于:
贡献者: BobYue-01