VSCode Remote-SSH无remote.uploadIgnore配置项,所谓“上传忽略”实为误解;真正有效的是files.exclude(隐藏文件)和files.watcherExclude(避免监视阻塞),二者需配于远程.vscode/settings.json并重启窗口生效。

VSCode SSH远程开发中.vscode/settings.json的remote.uploadIgnore不生效?
它根本不存在——VSCode官方没有remote.uploadIgnore这个配置项。你搜到的很多教程是把旧版插件或本地ftp-sync等扩展的配置名套用到了Remote-SSH上,结果死活不生效。
Remote-SSH本身不提供“上传忽略”功能,它只做端口转发和文件系统挂载;所谓“同步上传”其实是你手动保存触发了文件写入远程磁盘,不是VSCode在后台上传。真正要忽略的,是编辑器自动同步行为(比如保存时覆盖、自动上传未跟踪文件),这得靠两层控制:
-
files.exclude:仅影响资源管理器显示,不影响保存行为 -
files.watcherExclude:防止远程文件变更触发本地重载(但不阻止写入) - 真正起作用的是
remote.SSH.showLoginTerminal这类开关?不,完全无关
想跳过某些文件保存到远程,必须用files.exclude + 保存前手动检查
Remote-SSH没有拦截保存的钩子,所以无法像WebStorm那样配置“保存时跳过匹配路径”。唯一能做的,是让这些文件在编辑器里“看不见”,降低误操作概率。
在远程工作区根目录下的.vscode/settings.json里加:
{
"files.exclude": {
"**/node_modules": true,
"**/.env.local": true,
"**/dist/**": true,
"**/*.log": true
}
}
注意:files.exclude只隐藏资源管理器里的文件,Ctrl+P仍能打开,保存后依然会写入远程。所以关键动作是:改完.env.local别手抖按Ctrl+S——它没被禁止保存,只是你看不见。
- 路径匹配基于glob语法,
**表示任意层级,*只匹配当前层 - 该配置必须放在远程机器上的
.vscode/settings.json,本地同名文件无效 - 修改后需关闭再重开远程窗口才生效(不会热更新)
遇到ETXTBSY或Permission denied错误,大概率是files.watcherExclude没配好
远程Linux上文件被占用(比如webpack正在监听dist/),VSCode的文件监视器会反复尝试读取,触发ETXTBSY错误并卡住保存流程——看起来像“忽略失效”,其实是保存被阻塞了。
在.vscode/settings.json中补上:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true
}
}
-
files.watcherExclude告诉VSCode:“别盯着这些目录看”,避免因权限/占用问题拖慢整个编辑器响应 - 它不影响保存,但能大幅减少
File change detected弹窗和保存失败 - 值必须是对象格式,不能写成数组,否则配置静默失效
真要彻底禁用某类文件写入远程?只能靠chmod -w或chattr +i
如果连.env.local这种敏感文件都怕误保存,靠编辑器配置已经不够用了。最可靠的方式是在远程机器上直接锁定文件:
登录远程终端执行:
chmod -w .env.local
或者更彻底(需root):
sudo chattr +i .env.local
-
chmod -w会让VSCode保存时报Permission denied,但至少你知道出错了 -
chattr +i连root都无法修改,VSCode会直接报Operation not permitted - 这样做的代价是:每次需要修改时都得先解除锁定,适合极少数核心配置文件
复杂点在于:你得记住哪些文件被锁了,以及它们分布在哪个远程项目里——没有中央配置,全靠人工维护。


















