Skip to content

账号备份与迁移:导入/导出、V1/DB 热迁移

你真正想“备份”的,其实不是配额数字,而是能让账号重新登录的 refresh_token。这节课把 Antigravity Tools 的几种迁移手段讲清楚:导入/导出 JSON、从 state.vscdb 导入、从 V1 数据目录导入,以及自动同步的工作方式。

学完你能做什么

  • 把账号池导出成一个 JSON 文件(只包含 email + refresh_token)
  • 在新机器上导入这个 JSON,快速恢复账号池
  • 直接从 Antigravity/IDE 的 state.vscdb 导入“当前登录账号”(支持默认路径与自定义路径)
  • 从 V1 数据目录自动扫描并导入旧账号
  • 了解“自动同步当前账号”到底会做什么、什么时候会跳过

你现在的困境

  • 重装系统/换电脑后,账号池要重新加一遍,成本很高
  • 你在 Antigravity/IDE 里换了登录账号,但 Manager 里的“当前账号”没跟着变
  • 你以前用过 V1/脚本版,手里只有旧数据文件,不知道能不能直接迁移

什么时候用这一招

  • 你要把账号池搬到另一台机器(桌面端/服务器/容器)
  • 你把 Antigravity 作为“权威登录入口”,希望 Manager 自动同步当前账号
  • 你要从旧版本(V1 数据目录)把账号迁过来

🎒 开始前的准备

  • 你已经能打开 Antigravity Tools,并至少有一个账号在账号池里
  • 你知道账号数据属于敏感信息(尤其是 refresh_token

安全提醒:把备份文件当作密码

导出的 JSON 文件包含 refresh_token。任何拿到它的人,都可能用它去刷新 access token。不要把备份文件上传到网盘公共链接、不要发群、不要提交到 Git。

核心思路

Antigravity Tools 的“迁移”本质上就两件事:

  1. 找到可用的 refresh_token
  2. 用它换取 access token,并向 Google 获取真实邮箱,然后把账号写进本地账号池

它提供了三条入口:

  • JSON 导入/导出:适合你明确要做“可控备份”
  • DB 导入:适合你把 Antigravity/IDE 的登录状态当作权威来源(默认找 state.vscdb,也支持手选文件)
  • V1 导入:适合从旧数据目录自动扫描并迁移

另外还有一条“自动同步”:它会周期性读取 DB 里的 refresh_token,如果与 Manager 当前账号不同,就自动执行一次 DB 导入;如果相同就直接跳过(节省流量)。

跟我做

第 1 步:导出账号池(JSON 备份)

为什么 这是最稳定、最可控的迁移方式。你拿到一个文件,就能在另一台机器恢复账号池。

操作:进入 Accounts 页面,点击导出按钮。

  • 如果你在设置里配置了 default_export_path,导出会直接写入该目录,并使用文件名 antigravity_accounts_YYYY-MM-DD.json
  • 如果没配置默认目录,会弹出系统保存对话框让你选择路径。

导出文件内容大致长这样(数组里每项只保留必要字段):

json
[
  {
    "email": "[email protected]",
    "refresh_token": "1//xxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
    "email": "[email protected]",
    "refresh_token": "1//yyyyyyyyyyyyyyyyyyyyyyyy"
  }
]

你应该看到:页面提示导出成功,并显示保存路径。

第 2 步:在新机器导入 JSON(恢复账号池)

为什么 导入会逐个调用“添加账号”逻辑,用 refresh_token 拉取真实邮箱并写入账号池。

操作:还是在 Accounts 页面,点击“导入 JSON”,选择你刚导出的文件。

格式要求如下(至少需包含 1 条有效记录):

  • 必须是 JSON 数组
  • 系统只会导入包含 refresh_token 且以 1// 开头的条目

你应该看到:导入结束后,账号列表里出现导入的账号。

如果你导入时 Proxy 正在运行

每次“添加账号”成功后,后端会尝试 reload 反代的 token pool,让新账号立刻生效。

第 3 步:从 state.vscdb 导入“当前登录账号”

为什么 有时候你不想维护备份文件,只想“以 Antigravity/IDE 的登录状态为准”。DB 导入就是为这个场景准备的。

操作:进入 Accounts 页面,点击 Add Account,切到 Import 标签页:

  • 点“从数据库导入”(使用默认 DB 路径)
  • 或点“Custom DB (state.vscdb)”手动选择一个 *.vscdb 文件

默认 DB 路径是跨平台的(也会优先识别 --user-data-dir 或 portable mode):

text
~/Library/Application Support/Antigravity/User/globalStorage/state.vscdb
text
%APPDATA%\Antigravity\User\globalStorage\state.vscdb
text
~/.config/Antigravity/User/globalStorage/state.vscdb

你应该看到

  • 导入成功后,这个账号会被自动设置为 Manager 的“当前账号”
  • 系统会自动触发一次配额刷新

第 4 步:从 V1 数据目录迁移(旧版本导入)

为什么 如果你以前用过 V1/脚本版,Manager 允许你直接扫描旧数据目录并尝试导入。

操作:在 Import 标签页,点击“导入 V1”。

它会去你的 home 目录下找这个路径(以及其中的索引文件):

text
~/.antigravity-agent/
  - antigravity_accounts.json
  - accounts.json

你应该看到:导入完成后,账号出现在列表里;如果没找到索引文件,后端会返回错误 V1 account data file not found

第 5 步(可选):开启“自动同步当前账号”

为什么 当你在 Antigravity/IDE 里切换登录账号时,Manager 可以按固定间隔检测 DB 中的 refresh_token 是否变化,并在变化时自动导入。

操作:进入 Settings,开启 auto_sync,并设置 sync_interval(单位:秒)。

你应该看到:开启后会立即执行一次同步;之后按间隔周期性执行。如果 DB 里的 refresh_token 与当前账号相同,会直接跳过,不会重复导入。

检查点 ✅

  • 你能在 Accounts 列表中看到导入的账号
  • 你能看见“当前账号”已经切换到你期望的那一个(DB 导入会自动设为当前)
  • 你把 Proxy 启动后,新导入的账号能被正常用于请求(以实际调用结果为准)

踩坑提醒

场景你可能会怎么做(❌)推荐做法(✓)
备份文件安全把导出的 JSON 当普通配置文件随手发出去把 JSON 当密码,最小化传播范围,避免公网暴露
JSON 导入失败JSON 不是数组,或 refresh_token 没有 1// 前缀用本项目导出的 JSON 作为模板,保持字段名与结构一致
DB 导入找不到数据Antigravity 没有登录过,或 DB 里缺少 jetskiStateSync.agentManagerInitState先确认 Antigravity/IDE 已登录,再尝试导入;必要时用 Custom DB 选对文件
V1 导入后账号不可用旧 refresh_token 失效删除该账号后用 OAuth/新 refresh_token 重新添加(以错误提示为准)
auto_sync 太频繁sync_interval 设得很小,频繁扫描 DB把它当作“状态跟随”,间隔设到你能接受的频率即可

本课小结

  • JSON 导出/导入是最可控的迁移方式:备份文件里只保留 email + refresh_token
  • DB 导入适合“以 Antigravity/IDE 当前登录账号为准”,并会自动设为 Manager 当前账号
  • V1 导入会扫描 ~/.antigravity-agent 并兼容多种旧格式
  • auto_sync 会比较 refresh_token;相同则跳过,不会重复导入

下一课预告

下一课我们把“迁移后的账号池”真正用起来:启动本地反代并接入第一个客户端(/healthz + SDK 配置)

你会学到:

  • 怎么启动/停止 Proxy,并用 /healthz 做最小验证
  • 怎么在 SDK/客户端里配置 Base URL

附录:源码参考

点击展开查看源码位置

更新时间:2026-01-23

功能文件路径行号
Accounts 导出/导入 JSON(save_text_file / read_text_filesrc/pages/Accounts.tsx458-578
Dashboard 导出账号 JSONsrc/pages/Dashboard.tsx113-148
Import 标签页:DB 导入 / Custom DB / V1 导入按钮src/components/accounts/AddAccountDialog.tsx491-539
添加账号:忽略前端 email、用 refresh_token 获取真实邮箱、自动刷新配额、Proxy 热 reloadsrc-tauri/src/commands/mod.rs19-60
---------
DB 导入:从 state.vscdb 提取 refresh_token(ItemTable + base64 + protobuf)src-tauri/src/modules/migration.rs192-267
---------
DB 导入后自动设为“当前账号”并刷新配额src-tauri/src/commands/mod.rs495-511
auto_sync:比较 refresh_token,相同直接跳过;变化则触发 DB 导入src-tauri/src/commands/mod.rs532-564
前端后台任务:按 sync_interval 周期性调用 syncAccountFromDb()src/components/common/BackgroundTaskRunner.tsx43-72