VSCode官方Settings Sync自1.74+起仅支持Microsoft账户,GitHub路径已失效;需清空sync.gist/sync.provider配置、关闭再重开同步,并确保UI State等独立项已启用。

Settings Sync 登录失败:不是账号问题,是服务路径选错了
VSCode 1.74+ 版本已彻底切换为 Microsoft 账户驱动的同步后端,GitHub 登录路径在绝大多数新安装或更新后的实例中**直接不可用**。你点“Turn on Settings Sync…”后跳转空白页、反复重定向、或提示 Sync is disabled,大概率是因为还在走旧流程。
必须确认两件事:VSCode 版本 ≥ 1.74,且没手动配置过 sync.gist 或 sync.provider(这些旧配置项会强制降级到 GitHub 模式并失败)。
- 打开设置搜索
sync.gist,如果值非空,直接删掉;再搜sync.provider,也清空 - 命令面板运行
Settings Sync: Turn Off,再运行Settings Sync: Turn On,这次只会出现 Microsoft 登录选项 - 务必用
outlook.com/hotmail.com等 Microsoft 账户登录,GitHub 账号此时无法完成 OAuth 流程
插件同步失败:Extensions 不是“装完就同步”,要看 Location 字段
同步开启后,新设备上扩展列表为空,或旧插件被“覆盖卸载”,不是网络或权限问题,而是 VSCode 对扩展来源做了严格区分——只有 Location: Sync 的扩展才算真正同步成功。
打开命令面板运行 Developer: Show Running Extensions,逐个检查扩展的 Location 列:
-
Sync:来自云端,受同步控制,可跨设备一致 -
User:本地手动安装,不会被同步覆盖,但也不会上传到云端 -
Workspace:仅限当前文件夹,完全不参与同步
如果你在某台设备上用命令行或拖拽方式装了插件(比如 code --install-extension ms-python.python),它默认是 User 类型,不会进同步流。解决方法:在该设备上运行 Extensions: Install Extension from VSIX… 重新装一次,或干脆在另一台已同步的设备上操作安装。
主题/颜色/侧边栏状态不同步:UI State 是独立开关,不是 settings.json 的副产品
改了 workbench.colorTheme 却发现新设备还是默认主题?不是同步漏了,是 UI State 根本没开。VSCode 把主题、活动编辑器标签顺序、终端是否展开、侧边栏折叠状态等全部打包进一个叫 UI State 的独立同步项里,它和 Settings 互不依赖。
- 首次启用或重配同步时,必须手动勾选
UI State—— 它不会默认开启 - 即使
settings.json里写了"workbench.colorTheme": "One Dark Pro",若目标设备没装同名主题,VSCode 会静默 fallback 到Default Dark+,看起来像“同步失败” - 检查所有设备是否都已安装对应主题:打开扩展视图,搜主题名,确认状态是
Installed,而非Disabled或根本不存在 - 如果某台设备的
settings.json显式声明了workbench.iconTheme,而另一台没装该图标包,整个 UI State 加载会失败,导致主题回退
敏感配置跨设备冲突:不要改 settings.json,改 argv.json
代理地址、Python 解释器路径、终端环境变量这类强依赖本地环境的配置,一旦同步到另一台设备,轻则功能异常,重则编辑器卡死。VSCode 不提供“按 key 排除”界面,但留了一条干净的逃逸路径:argv.json。
这个文件不参与任何同步,且优先级高于 settings.json 中的同名项,适合放机器特有配置:
- Linux/macOS 路径:
~/.vscode-oss/argv.json(OSS 版)或~/.config/Code/argv.json(官方版) - Windows 路径:
%APPDATA%\Code\argv.json - 内容示例:
{ "http.proxy": "http://127.0.0.1:8888", "python.defaultInterpreterPath": "/opt/homebrew/bin/python3" } - 改完需重启 VSCode 才生效,但它能确保这些值永远只在本机起作用
真正容易被忽略的是:很多人以为删掉 settings.json 里的敏感项就安全了,其实只要同步开关开着,其他设备推过来的值仍会自动写入——argv.json 是唯一能物理隔离的方案。


















