files.exclude 不影响 scm 面板,因其仅过滤资源管理器和搜索;scm 显示由 git 状态决定,需通过 .gitignore 忽略文件,必要时执行 git rm -r --cached 并刷新源代码控制。

源代码管理面板(SCM)里文件还在,但 files.exclude 不起作用?
这是最常被误解的一点:files.exclude 只影响资源管理器(左侧文件树)和搜索功能,**完全不干预 Git 状态显示**。你在 SCM 面板看到的 .exe、.log、build/ 文件,是 Git 自己检测到的“已修改/未跟踪”状态,VS Code 只是把 Git 的结果原样展示出来。
所以光加 "**/*.exe": true 到 files.exclude,对 SCM 面板毫无影响——它不是“隐藏”,而是“Git 还管着它们”。
- Git 会扫描工作区所有文件,只要没被
.gitignore拦住,就可能出现在 SCM 面板 -
files.exclude和.gitignore是两套独立机制:前者是 VS Code UI 层过滤,后者是 Git 版本控制层过滤 - 想让 SCM 面板不列某个文件夹,必须让 Git “看不见”它,而不是让 VS Code “不显示”它
真正该改的是 .gitignore,不是 VS Code 设置
在项目根目录下创建或编辑 .gitignore 文件,写入你要忽略的路径模式。Git 读取后,这些文件就不会出现在 SCM 面板,也不会被 git add 捕获。
- 忽略所有编译产物:
**/*.exe、**/*.out、**/*.dll - 忽略日志目录:
logs/、**/Logs/(注意末尾斜杠表示目录) - 忽略构建输出:
build/、dist/、target/ - 如果文件已被 Git 跟踪过(即之前 commit 过),得先取消跟踪:
git rm -r --cached build/,再提交一次.gitignore更新
search.exclude 和 files.exclude 要同步配,否则搜不到却看得到
你可能希望:既不在资源管理器里看到 .log,又不让全局搜索扫它们。这时候两个配置都得设,且模式要一致。
- 只设
files.exclude→ 文件树里消失,但Ctrl+Shift+F搜索时仍会命中 - 只设
search.exclude→ 搜索结果干净,但资源管理器里还堆着一堆.log - 推荐统一加进工作区设置(
.vscode/settings.json):
{
"files.exclude": {
"**/*.log": true,
"**/logs/": true,
"**/*.exe": true
},
"search.exclude": {
"**/*.log": true,
"**/logs/": true,
"**/*.exe": true
}
}
这样资源管理器、搜索、甚至部分扩展(如文件图标插件)的行为才一致。
为什么有些文件删了 .gitignore 还在 SCM 面板?
常见于两类情况:文件曾被 git add 过,或 Git 缓存没刷新。VS Code 不会自动触发 git status 重检,有时需要手动干预。
- 执行
git status看终端输出,确认 Git 是否真认为那些文件“已忽略” - 如果输出里仍有
modified:或untracked:条目,说明.gitignore没生效,检查路径是否拼错、是否用了绝对路径、是否漏了/ - VS Code 右下角 Git 状态栏点一下,选 “Refresh Source Control”(或按
Ctrl+Shift+P输入 “Git: Refresh”)强制重载状态 - 极少数情况需重启 VS Code——不是因为设置不热更新,而是 Git 扩展缓存了旧的 index 快照
真正关键的永远是 Git 本身的状态,VS Code 只是它的显示器。盯着 SCM 面板调设置,不如先跑一遍 git status 看清真相。











