用户数据与迁移
Crib 在你的 Mac 上保存哪些文件、哪些属于个人资料,怎样备份和恢复,以及从 PGDash 一次性迁移的过程。
用户目录
Crib 的数据在 ~/Library/Application Support/Crib/。下面列出与你有关的部分,有些文件在用到相应功能后才出现:
~/Library/Application Support/Crib/
- user.sqlite个人资料:笔记、书签、标签、阅读历史、更正
- preferences.json设置
- session.json窗口、标签页和阅读位置
- snippets.json片段库
- backups/个人资料库升级结构前自动做的备份
Library/下载或导入的资料包、搜索世代和登记表
- packs/
- generations/
- registry.sqlite
- Distribution/版本目录缓存
- Distribution-partials/中断下载的已下载部分,保留 7 天
- Distribution-rejected/无法再通过校验的旧目录缓存,保留最近 5 份
- api/本地 API 的地址、密钥和锁,启用 API 后出现
- crib-migration.json从 PGDash 迁移的记录,迁移过才有
App 内置的资料包和初始搜索索引在 Crib.app/Contents/Resources/Library 里,只读,随 App 一起替换。
个人资料与内容
| 类别 | 文件 | 丢了会怎样 |
|---|---|---|
| 个人资料 | user.sqlite、snippets.json、preferences.json、session.json | 无法从别处恢复,需要自己备份 |
| 内容 | Library/、Distribution*/ | 可以重新下载或导入;内置内容随 App 恢复 |
| 运行状态 | api/ | 重新启用本地 API 时重建 |
下载、导入、启用、停用、卸载资料包和恢复资料组合都不写个人资料。卸载一个版本不会删除挂在上面的笔记。
备份个人资料
| 命令 | 位置 | 得到什么 |
|---|---|---|
| 备份个人资料… | “资料库 → 维护”,或个人资料列表的更多菜单 | 一个 SQLite 文件,默认名 Crib-user-backup.sqlite,含笔记、书签、标签、阅读历史和更正 |
| 导出个人资料… | 个人资料列表的更多菜单 | 一个可移植的文件夹,默认名 Crib-personal |
| 导出更正… | 个人资料列表的更多菜单 | 只含更正的文件夹,默认名 Crib-corrections |
| 导出片段库… | “设置 → 片段”的更多菜单 | 片段库文件 |
- 备份和导出前,Crib 先保存所有正在编辑的草稿。与其他编辑冲突的草稿另存为新笔记。
- 备份用 SQLite 的在线备份完成,包含尚未合并进主文件的已提交数据。Crib 运行时直接复制
user.sqlite可能漏掉这部分。 - 备份不能保存到 Crib 的用户目录里。
- 片段和设置不在个人资料备份里,片段要单独导出。
恢复个人资料
- 导入个人资料…:读入一个导出的文件夹,与现有个人资料合并;冲突的条目另存为副本,不覆盖。
- 从备份恢复…:只在个人资料打不开时出现(提示“无法打开个人资料”或“个人资料需要更新版本的 Crib”)。Crib 先打开备份的副本检查,通过后把原来的
user.sqlite改名为user-unreadable-<时间>.sqlite保留,再换上备份,然后重新打开。 - 新建个人资料…:个人资料打不开时,从空白开始;原文件同样改名保留。
个人资料打不开时,阅读和搜索照常可用,只有笔记、书签、更正和阅读历史停用。
从 PGDash 迁移
Crib 以前叫 PGDash,数据在 ~/Library/Application Support/PGDash/。Crib 启动时、打开任何数据之前,会检查是否需要迁移。
迁移过程
- 确认 PGDash 没有在运行。PGDash 仍在运行时迁移失败,提示退出 PGDash 后重试。
- 清点旧目录中每个文件的大小和 SHA-256。遇到符号链接、多个硬链接或特殊文件就停止。
- 把整个旧目录复制到用户资料目录旁边的暂存目录
.crib-migration-<编号>,再清点一次;复制期间旧目录有变化就停止。 - 用 SQLite 在线备份从副本重建
user.sqlite和Library/registry.sqlite,并把登记表里的路径改到新目录。 - 旧的
api/改名为legacy-api-<编号>存档。在 Crib 中需要重新启用本地 API。 - 写入迁移记录
crib-migration.json,同步到磁盘,然后一次性改名为Crib/。
旧目录从头到尾只读:不写入、不创建 WAL 文件,也不删除。迁移完成后它原样留在原处。
状态文件
迁移状态记在 ~/Library/Application Support/.Crib-migration-state.json,在 Crib 目录之外,因此失败的尝试不会被误认为已迁移。
| 状态 | 含义 |
|---|---|
pending | 正在迁移 |
failed | 上次迁移失败 |
done | 已完成 |
declined | 你选择了跳过,不再尝试 |
replaceRequested | 你要求用旧资料替换现有的 Crib 资料,下次启动时执行 |
迁移失败
迁移失败时不创建 Crib 目录,Crib 以只读方式运行:内置文档照常阅读和搜索,笔记、书签、更正、阅读历史、下载和设置都不能修改。每次启动都会重试。提示窗口有三个按钮:
- 重试迁移:立即再试一次,成功后 Crib 重新打开。
- 稍后处理:保持只读,下次启动再试。
- 跳过迁移…:确认后 Crib 从空白的个人资料开始,旧资料原样留在原目录,以后不再提示。
已有 Crib 资料时
如果 Crib 目录已经存在、没有迁移记录,而 PGDash 目录也还在,Crib 提示“发现 PGDash 旧资料”:
- 迁移旧资料:Crib 重新打开时,把现有 Crib 目录整体改名为
Crib-before-migration-<时间>保留,再迁移旧资料。迁移失败时改回原名。 - 稍后处理:下次启动再提示。
- 不再提示:继续使用现有的 Crib 资料。
迁移之后
环境变量
这些变量用于开发和测试,日常使用不需要设置。
CRIB_LIBRARY、CRIB_CATALOG_URL和两个CRIB_ALLOW_*变量没有设置时,Crib 读取同名的旧变量PGDASH_*;两者都设置时以CRIB_*为准。PGDASH_USER_DATA不再指定 Crib 的用户目录,只被当作迁移来源。- 设置了任何
CRIB_*或PGDASH_*变量时,需要重新打开的操作(例如迁移完成后)只退出 Crib,不会自动重新打开。