VSCode不自动读取.gitignore,需手动将其中路径转为"**/dist": true等glob规则写入files.exclude;同时必须同步配置search.exclude和files.watcherExclude,三者作用域独立且互不影响。

VSCode 无法自动隐藏 .gitignore 中的文件——files.exclude 和 .gitignore 完全无关,必须手动同步配置。
为什么 .gitignore 里的文件还在侧边栏里
Git 忽略规则只影响 Git 命令(如 git status、git add),VSCode 的资源管理器根本不读 .gitignore。你看到的 node_modules、dist、logs/ 还在侧边栏,是因为没显式告诉 VSCode “别显示它们”。
-
files.exclude是纯 UI 层过滤,和 Git 状态、提交行为、终端命令全部无关 - 即使某个文件已被
git rm --cached移出暂存区,只要没配files.exclude,它仍会出现在侧边栏 - 没有“自动同步
.gitignore到侧边栏”的原生功能;插件(如gitignore)只能帮你生成初始规则,不能实时监听变更
怎么把 .gitignore 内容转成 files.exclude 规则
最稳妥的做法是手动提取关键路径,转换为 glob 模式写入 files.exclude。注意三类常见转换陷阱:
- 以
/开头的路径(如/build)→ 改为"build": true(根级)或"**/build": true(任意层级) - 带通配符的行(如
*.log)→ 写成"**/*.log": true;**/必须显式写出,*.log单独写不匹配子目录 - 注释行(
# compiled files)和空行 → 完全忽略,files.exclude不支持注释 - 排除整个目录要加末尾斜杠语义:写
"dist/": true无效,必须用"**/dist": true
示例:.gitignore 中有:
"dist\nlogs/\n*.tmp"
对应 files.exclude 应写为:
"files.exclude": {
"**/dist": true,
"**/logs": true,
"**/*.tmp": true
}
search.exclude 必须同步配,否则搜索仍扫到被忽略的文件
很多人只改了 files.exclude,结果 Ctrl+Shift+F 搜索时还是满屏 node_modules 里的报错——因为搜索走的是另一套配置。
-
search.exclude规则语法和files.exclude完全一致,但必须单独声明,不继承、不联动 - 推荐三者保持完全一致:
files.exclude、search.exclude、files.watcherExclude -
files.watcherExclude尤其关键:不配它,VSCode 仍会监听node_modules下数万个文件变化,导致保存卡顿、CPU 升高 - 所有路径都区分大小写(Linux/macOS 严格,Windows 默认不敏感但建议按实际大小写写)
工作区设置优先级高,多项目混用时容易漏配
如果你在 A 项目中配了全局 files.exclude,但 B 项目有自己的 .vscode/settings.json,那 B 项目会完全无视你的全局配置——这是设计使然,不是 bug。
- 团队协作时,只把项目强相关的排除项(如
"**/build": true、"**/coverage": true)放进.vscode/settings.json - 个人习惯类规则(如
"**/tmp": true)应放在用户级settings.json,避免污染仓库 - 检查当前生效的是哪一级设置:看 VSCode 窗口右下角,显示「工作区设置」才表示
.vscode/settings.json正在起作用 - 修改后无需重启,但已展开的父文件夹需手动折叠再展开,才能刷新显示
真正麻烦的从来不是怎么写规则,而是意识到 VSCode 的三个排除系统(显示 / 搜索 / 监听)彼此隔离,且每个都受作用域控制——漏掉任意一环,侧边栏就还会“不干净”。











