Sublime Text的upload_on_save默认单向覆盖上传,不校验远程变更;不触发上传主因是sftp-config.json位置错误、ignore_regexes误过滤自身、远程路径无写权限或ST4未装SFTP-Next插件。

Sublime Text 没有“覆盖同步”这个内置概念,upload_on_save 默认就是单向覆盖上传——本地改了,就直接把本地内容推上去,不校验远程文件是否被别人改过。所谓“强制上传”,本质是绕过插件的默认保护逻辑(比如跳过 download_on_open 拉取、忽略 ignore_regexes、或强行重传已标记为“同步成功”的文件)。
为什么 upload_on_save 有时不触发上传
这不是“没覆盖”,而是根本没走上传流程。常见原因:
-
sftp-config.json不在项目根目录,或路径配置里local_path指向了父目录(比如你打开的是/project,但配置写的是"local_path": "/") -
ignore_regexes误写了sftp-config.json自身,导致插件加载失败,upload_on_save彻底静默 - 远程路径权限不足(如
/var/www/html/下文件属主不是当前 SSH 用户),上传时无报错但实际写入失败 - ST4 用户装了旧版 SFTP(非
SFTP-Next),插件根本不兼容,控制台会报no module named sftp
如何手动触发一次强制上传(单文件/单目录)
右键菜单最可靠,不依赖配置是否生效:
- 选中文件 → 右键 →
Upload File(跳过所有 ignore 规则,强制覆盖) - 选中文件夹 → 右键 →
Upload Folder(同样跳过 ignore,但不会递归上传子目录里被 ignore 的文件) - 如果右键没出现这些选项,说明 SFTP 插件未正确加载:检查控制台(
Ctrl+`)是否有ImportError或路径错误提示
想跳过 download_on_open 直接上传?关掉它就行
download_on_open 和 upload_on_save 是独立开关,但开启前者会导致每次打开文件先拉远程版,再让你编辑——你改完保存,其实是在编辑“刚拉下来的副本”,容易误以为上传没生效。要确保“本地改完就推”,必须:
- 确认
sftp-config.json中"download_on_open": false(不是null或删掉这一行,默认是false,但显式写出来更保险) - 不要依赖“打开即同步”场景;如果真需要对比,用
Compare with Server右键命令手动比对 - 大文件(>2MB)上传卡住?加
"connect_timeout": 60和"timeout": 60,避免因超时被插件中断
真正危险的“强制覆盖”操作
别碰 sync_down_on_open: true + upload_on_save: true 组合。前者一打开就全量拉取远程目录,后者一保存就全量推回去——中间任何一次 Ctrl+S 都可能把刚拉下来的、别人提交的代码覆盖掉。生产环境务必禁用 sync_down_on_open,只在本地开发分支上用 upload_on_save 单向推。
最容易被忽略的是 SSH 密钥权限:ssh_key_file 指向的私钥文件,macOS/Linux 上必须是 600 权限(chmod 600 ~/.ssh/id_rsa),Windows 上若用密码登录,password 字段不能为空字符串,否则连接挂起无提示。


















