VS Code 的 SFTP 扩展不支持自动双向同步,仅提供手动上传/下载、保存即上传及单向上传;uploadOnSave 不感知远程变更,易覆盖文件;watcher 配合 downloadOnFileChange 可有限提示但非实时同步;安全做法是关闭 uploadOnSave、显式操作、合理忽略文件;高需求应改用 sshfs 挂载。

VS Code 的 sftp 扩展(由 liximomo 维护)本身不支持“自动双向同步”,它只提供手动上传/下载、保存即上传、以及基于文件变更的单向上传(uploadOnSave)。所谓“同步”必须靠配置 + 理解其行为边界来逼近需求,否则极易丢文件或覆盖错误。
为什么 uploadOnSave 不等于同步
开启 "uploadOnSave": true 后,本地保存文件会立即上传到远程,但远程文件被修改(比如服务器上直接编辑、Git 拉取、脚本生成),VS Code 完全不会感知,也不会拉取。这不是 bug,是设计如此——sftp 扩展没有监听远程文件系统变化的能力。
- 远程改了 config.yml,你本地没拉,再保存时就会把旧版覆盖上去
- 多人协作时,别人上传了新版本,你本地无提示,保存即回滚
-
downloadOnOpen只在首次打开文件时触发,之后远程更新仍不可见
watcher 配置能解决远程变更通知吗
可以有限缓解,但不能替代真正的同步。扩展支持 watcher 选项,通过轮询远程目录的 mtime 或解析 ls -la 输出来检测变化:
"watcher": {
"type": "rsync",
"interval": 5000,
"args": ["-av", "--delete", "remote:/path/", "./local/"]
}
注意:type: "rsync" 实际调用的是本地 rsync 命令,不是扩展内置功能;且该配置仅用于触发 onFileChange 事件(比如弹出“远程文件已更改,是否重新加载?”),并不会自动执行下载。真正生效需配合 "fileWatcher": { "enable": true } 和 "downloadOnFileChange": true(后者是较新版本才支持的隐藏选项,非文档公开项)。
1、请上传下载到的淘宝客系统安装包并上传到空间根目录中进行解压,解压后将网站文件移动到根目录的位置,然后访问 /install 进行安装。您也可以在本地解压,并以二进制方式将程序上传至您的网站空间。 2、同意启科网络电子商务系统安装协议进入下一步。 3、如果系统检测环境通过,则会提示输入您的数据库服务器地址(一般为本机,即127.0.0.1或者localhost)、数据库账号、数据库密码、数据库名
- 轮询有延迟,
interval设太小加重服务器负担,太大错过变更 -
rsync方式要求本地装了 rsync 且能免密登录远程 -
downloadOnFileChange仅对已打开的文件有效,未打开的文件变更不会自动拉取
安全绕过“覆盖风险”的最小可行配置
如果必须高频交互远程文件,建议放弃“全自动同步”幻想,改用明确分阶段的操作流:
- 关闭
uploadOnSave,改用快捷键Ctrl+Shift+P→SFTP: Upload file显式上传 - 打开文件前,先手动执行
SFTP: Download file(或绑定快捷键),确保本地是最新版 - 在
sftp.json中强制设置"ignore": [".git", "node_modules", "*.log"],防止误传临时文件 - 启用
"preserveTimestamps": true,让远程文件时间戳与本地一致,方便后续用rsync -u增量比对
真正需要双向实时同步的场景,应该换用 sshfs 挂载远程目录为本地磁盘,再用 VS Code 打开挂载路径——这时文件系统层已统一,所有编辑、保存、Git 操作都自然生效,sftp 扩展反而成了累赘。









