要让vs code的scm面板不再显示某个文件夹,必须同时满足:1. 在项目根目录.gitignore中添加该路径(如.vscode/);2. 对已跟踪路径执行git rm -r --cached清除索引;否则git仍会报告其变更。

VS Code 本身不提供“让某个文件夹不被 Git 监控”的独立开关,它完全依赖 Git 自身的行为。真正起作用的是:.gitignore 规则 + git rm --cached 清理已跟踪状态 —— 缺一不可。
为什么.vscode/或dist/改了.gitignore还是出现在 SCM 视图里
最常见原因是这些路径**已经被 Git 跟踪过**。Git 对「已跟踪文件」完全无视 .gitignore,哪怕你刚写完规则,它照常上报修改、删除、新增。
- 运行
git ls-files --cached .vscode/,如果有输出,说明它还在 Git 索引里 -
git status中显示为M(modified)或D(deleted)的.vscode/文件,一定曾被git add过 - VS Code 的 SCM 视图只是把
git status结果可视化,它不会绕过 Git 规则“主动忽略”
彻底让某个文件夹退出 Git 管理的两步操作
以 .vscode/ 为例(其他如 dist/、build/ 同理):
- 在项目根目录的
.gitignore中添加一行:.vscode/(注意末尾斜杠表示目录) - 在终端中执行:
git rm -r --cached .vscode(必须加--cached,否则本地文件会被删) - 再执行
git commit -m "chore: stop tracking .vscode" - 之后 VS Code 的 SCM 视图就不再显示该目录下的任何变更
files.watcherExclude 和 git.ignore 不是一回事
files.watcherExclude 是 VS Code 自己的文件系统监听开关,和 Git 完全无关;而 .gitignore 是 Git 的规则。两者目标相似(减少干扰),但作用层不同:
-
files.watcherExclude防止 VS Code 启动 chokidar 去监听node_modules/,省 CPU 和内存,但它不影响 Git 行为 -
.gitignore让 Git 忽略未跟踪文件,也影响 VS Code 搜索(默认跳过被忽略路径),但不阻止文件监视器注册句柄 - 如果你只配了
files.watcherExclude却没清理.vscode/的 Git 状态,SCM 视图照样卡、照样报冲突
巨型仓库里最容易被忽略的细节
稀疏检出(git config core.sparseCheckout true)能从根本上减少工作区文件数量,但它要求你手动维护 .git/info/sparse-checkout —— VS Code 不会自动同步这个列表。一旦你用 git checkout 切换分支,而新分支里有 sparse-checkout 未列出的文件,它们不会自动出现,VS Code 打开时可能提示“找不到引用的模块”。这不是 bug,是 Git 行为;但很多人误以为是 VS Code 加载失败。











