国庆节10月1日
--


将 GitHub Gist 中的外部数据(说说、友链、影视、笔记本)迁移到博客本地,避免前端重复渲染
博客的部分数据(说说、友链、影视、笔记本)存储在 GitHub Gist 中,通过客户端 JS 获取并渲染。当数据量增大或需要离线使用时,可以使用迁移工具将 Gist 数据转移到本地 Content Collection 中。
迁移完成后,Gist 中的数据会被清空,前端不再渲染远程数据,避免本地 + 远端重复显示。
迁移脚本需要 Token 才能从 Gist 中删除已迁移的条目:
1# Linux / macOS2export GITHUB_TOKEN=ghp_你的Token3
4# Windows PowerShell5$env:GITHUB_TOKEN="ghp_你的Token"6
7# Windows CMD8set GITHUB_TOKEN=ghp_你的TokenToken 需要 gist 权限。在 GitHub → Settings → Developer settings → Personal access tokens 中创建。
没有 Token 也能运行,数据会写入本地,但不会从 Gist 中删除。你需要手动清空 Gist,否则前端会重复渲染。
1pnpm cli gist-migrate交互式选择迁移类型和预览模式。
1# 预览模式(不写入不删除,仅显示会做什么)2node scripts/backup-gist/index.js --dry-run3
4# 迁移全部数据5node scripts/backup-gist/index.js6
7# 只迁移某一类8node scripts/backup-gist/index.js moments # 说说9node scripts/backup-gist/index.js friends # 友链10node scripts/backup-gist/index.js bangumi # 影视/书籍/音乐/游戏11node scripts/backup-gist/index.js notebooks # 笔记本首次运行建议先加 --dry-run 参数预览,确认无误后再正式执行。
| 项 | 值 |
|---|---|
| Gist 文件 | moments.json |
| 本地目录 | src/content/moments/ |
| 文件命名 | {日期}.md,冲突自动加后缀 |
| 去重依据 | published 日期 |
Gist 中的说说如果没有 author 和 avatar 字段,脚本会自动补全为默认值:
1---2published: 2026-06-10 08:00:003author: 团子和蛋糕4avatar: /assets/ziyuan/tx.webp5tags:6 - 日常7---8
9今天天气真好| 项 | 值 |
|---|---|
| Gist 文件 | friends.json |
| 本地目录 | src/content/friends/ |
| 文件命名 | {序号}-{slug}.md |
| 去重依据 | siteurl |
1---2title: 某博客3imgurl: https://example.com/avatar.png4desc: 一个有趣的博客5siteurl: https://example.com6tags:7 - Blog8weight: 59---| 项 | 值 |
|---|---|
| Gist 文件 | bangumi.json |
| 本地目录 | src/content/bangumi/{category}/ |
| 文件命名 | {中文标题}.md |
| 去重依据 | title |
| 封面图 | 自动下载 + URL 重写 |
脚本会自动从 TMDB 下载封面图到 scripts/fetch-media/img-anime/,并将 URL 重写为自定义图床地址。
Gist 中的 movie、tv、documentary 不是 Astro schema 的有效枚举值,脚本会自动映射为 category: anime + 对应 subcategory。
1---2title: 你的名字3category: anime4status: 25image: https://img.tsh520.cn/file/blog/bangumi/你的名字.jpg6score: 107tags:8 - 动画9---| 项 | 值 |
|---|---|
| Gist 文件 | 每个笔记本独立一个 Gist |
| 本地目录 | src/content/life/notebooks/{笔记本名}/ |
| 文件命名 | {标题}.md |
| 去重依据 | id 字段 |
1---2date: 2026-06-103name: 今天的事4---5
6## 今天7玩了一天迁移 Bangumi 时,脚本自动从 TMDB 下载封面图。下载完成后需要手动上传到图床:
1scripts/fetch-media/img-anime/ → 上传到 → https://img.tsh520.cn/file/blog/bangumi/如果迁移时图片下载失败(如网络不通),可以单独运行:
1node scripts/backup-gist/download-images.js不会。脚本会检测本地已有文件并跳过,已从 Gist 删除的条目下次运行时自然不存在。
检查 Gist 是否已被清空。如果 Gist 中仍有数据,前端的客户端 JS 会继续获取并渲染。确保 Gist 中的数组为空 []。
image.tmdb.orgnode scripts/backup-gist/download-images.js 单独重试scripts/fetch-media/img-anime/迁移后的文件在 git status 中显示为未跟踪文件:
1# 删除迁移的文件(保留 git 已跟踪的文件)2git clean -f src/content/moments/ src/content/friends/ src/content/bangumi/ src/content/life/notebooks/[!DANGER] 回滚注意
Gist 中的数据已被删除,回滚后需要手动恢复 Gist 内容。
暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


