GitHub 记忆同步:AI 助手的异地备份方案

1671 字
8 分钟
GitHub 记忆同步:AI 助手的异地备份方案

核心目标:为 AI 助手箱宝实现记忆的异地版本化备份,防止 VPS 数据丢失,同时为未来迁移到 PVE 小主机做准备。

缘起:为什么需要记忆同步?#

箱宝是我的 OpenClaw AI 助手,拥有完整的”记忆系统”:

  • 短期记忆memory/YYYY-MM-DD.md — 每日对话日志
  • 长期记忆MEMORY.md — curated 重要决策和上下文
  • 档案memory/archive/ — 归档的旧日记

风险点

  1. VPS 故障可能导致记忆数据丢失
  2. 未来迁移到 PVE 小主机时需要完整迁移记忆
  3. 需要版本控制追踪记忆变更历史

解决方案:使用 GitHub 私有仓库进行异地备份,通过 Cron 定时自动推送。


一、仓库准备#

1.1 创建私有仓库#

在 GitHub 创建私有仓库 xiangbao-memory

Terminal window
# 仓库信息
- URL: https://github.com/Jielumoon/xiangbao-memory
- 可见性:Private(记忆含敏感上下文)
- 初始化:不添加 README(本地已有完整内容)

1.2 生成 GitHub PAT#

创建 Personal Access Token(Fine-grained 或 Classic 均可):

Terminal window
# 权限需求
- repo (Full control of private repositories)
# 或者 Fine-grained:
- Contents: Read and write

⚠️ 安全警告:PAT 必须保存在安全位置,不要提交到 Git 历史!


二、本地 Git 配置#

2.1 初始化仓库#

在 OpenClaw workspace 目录初始化 Git:

Terminal window
cd /root/.openclaw/workspace
# 配置 Git 用户(箱宝的身份!)
git config --global user.name "箱宝"
git config --global user.email "xiangbao@openclaw.ai"
# 初始化仓库
git init
# 添加远程仓库(使用 PAT)
git remote add origin https://ghp_YOUR_PAT_HERE@github.com/Jielumoon/xiangbao-memory.git

2.2 配置 .gitignore(关键!)#

⚠️ 血泪教训:首次提交时误追踪了大量敏感文件,包括:

  • docker/cli-proxy/auths/ — 900+ 个 API 凭证 JSON
  • docker/ds2api-runtime/config.json — API Key
  • backup/*.tar.gz — 大型备份文件(触发 GitHub LFS 警告)
  • .trash/ — 临时删除文件

正确的 .gitignore 配置

# 敏感凭证
**/auths/*.json
**/secrets/*.json
**/*.env
# 大型文件
backup/*.tar.gz
backup/*.zip
media/outbound/*.png
media/outbound/*.jpg
# 临时文件
.trash/
tmp/
*.log
# 系统文件
.DS_Store
Thumbs.db
# 其他 Git 仓库(避免嵌套)
blog/.git
skills/*/.git

2.3 首次提交#

Terminal window
# 添加所有文件
git add .
# 检查是否有大文件(>50MB 会警告)
git status
# 提交
git commit -m "🧠 初始化箱宝记忆备份 2026-02-28"
# 推送
git branch -M main
git push -u origin main

三、敏感文件清理(如果已误提交)#

如果像箱宝一样不小心提交了敏感文件,需要彻底清理:

3.1 从 Git 历史移除(不删除本地文件)#

Terminal window
# 移除已追踪的敏感目录
git rm --cached -r docker/cli-proxy/auths/
git rm --cached -r backup/
# 提交清理
git commit -m "🔒 移除敏感文件:cpa 凭证、ds2api 配置、备份文件"
# 强制推送(⚠️ 会重写历史)
git push -f origin main

3.2 如果已推送到 GitHub#

⚠️ 严重警告:即使 git push -f,敏感文件仍然存在于 GitHub 历史中!

正确做法

  1. 立即更换泄露的 API Key / PAT
  2. 使用 git filter-branch 或 BFG Repo-Cleaner 彻底清理历史
  3. 或者:删除仓库重新创建(箱宝的选择)

四、Cron 自动化同步#

4.1 创建同步脚本#

/root/.openclaw/workspace/scripts/memory-sync.sh
#!/bin/bash
set -e
WORKSPACE="/root/.openclaw/workspace"
cd "$WORKSPACE"
# 检查是否有变更
if git status --porcelain | grep -q .; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到记忆变更,开始同步..."
# 添加变更
git add memory/ MEMORY.md
# 提交(如果有变更)
if ! git diff --staged --quiet; then
git commit -m "📦 自动同步记忆 $(date '+%Y-%m-%d %H:%M')"
git push origin main
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 同步完成"
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 无记忆变更,跳过提交"
git reset
fi
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 工作区干净,无需同步"
fi

4.2 配置 Cron 任务#

Terminal window
# 编辑 crontab
crontab -e
# 添加每日同步任务(每天 02:00)
0 2 * * * /root/.openclaw/workspace/scripts/memory-sync.sh >> /var/log/memory-sync.log 2>&1

4.3 OpenClaw 内置 Cron(可选)#

OpenClaw 自身也有记忆同步 Cron,配置在 openclaw.json

{
"cron": {
"jobs": [
{
"name": "memory-sync",
"schedule": "0 10,14,18,22 * * *",
"text": "openclaw sessions sync --to diary"
}
]
}
}

区别

  • OpenClaw Cron:会话 → 日记文件(内部同步)
  • Git Cron:日记文件 → GitHub(异地备份)

推荐:两者都用,形成完整链路 ✅


五、安全最佳实践#

5.1 PAT 安全管理#

Terminal window
# ✅ 正确做法
- 使用 Fine-grained PAT(限制权限范围)
- 设置过期时间(如 90 天)
- 保存在安全位置(密码管理器、加密文件)
- 定期轮换
# ❌ 错误做法
- PAT 明文写在脚本里
- 提交 PAT Git 历史
- 使用永不过期的 Classic PAT

5.2 .gitignore 检查清单#

在首次推送前,务必检查:

Terminal window
# 检查是否有大文件
git ls-files -s | awk '{if ($3 > 52428800) print $4}'
# 检查是否有敏感文件
find . -name "*.json" -path "*/auths/*"
find . -name "config.json" -path "*/docker/*"
find . -name "*.env"

5.3 提交前审查#

Terminal window
# 查看将要提交的内容
git status
git diff --staged
# 如果有不确定的文件
git ls-files --others --exclude-standard

六、恢复与迁移#

6.1 从 GitHub 恢复记忆#

如果 VPS 数据丢失,可以从 GitHub 恢复:

Terminal window
# 克隆仓库
git clone https://github.com/Jielumoon/xiangbao-memory.git /root/.openclaw/workspace
# 恢复记忆文件
cp -r memory/ /root/.openclaw/workspace/
cp MEMORY.md /root/.openclaw/workspace/

6.2 迁移到新环境#

迁移到 PVE 小主机时:

Terminal window
# 1. 在新环境克隆仓库
git clone https://github.com/Jielumoon/xiangbao-memory.git /root/.openclaw/workspace
# 2. 配置 Git 远程(如果需要继续同步)
git remote set-url origin https://ghp_NEW_PAT@github.com/Jielumoon/xiangbao-memory.git
# 3. 验证记忆完整性
ls -la memory/
cat MEMORY.md | head -20

七、成本与限制#

7.1 GitHub 免费额度#

项目限制箱宝使用情况
私有仓库无限
单文件大小100MB(硬限制)✅ 记忆文件 <1MB
仓库总大小1GB(软限制)✅ 当前 ~50MB
带宽100GB/月✅ 同步频率低

7.2 潜在问题#

  1. 大文件警告:单个文件 >50MB 会警告,>100MB 拒绝

    • 解决:.gitignore 排除 backup/*.tar.gz
  2. Git 历史膨胀:频繁提交大文件会导致仓库膨胀

    • 解决:只追踪 memory/MEMORY.md
  3. 敏感信息泄露:误提交 API Key

    • 解决:提交前审查 + .gitignore 严格配置

八、效果与监控#

8.1 同步日志#

查看同步日志:

Terminal window
tail -f /var/log/memory-sync.log

示例输出:

[2026-03-01 02:00:01] 检测到记忆变更,开始同步...
[2026-03-01 02:00:03] 同步完成

8.2 GitHub 提交历史#

访问仓库查看提交历史:

https://github.com/Jielumoon/xiangbao-memory/commits/main

可以看到:

  • 每次同步的时间
  • 变更的文件
  • 提交消息(含日期)

总结#

核心收获#

  1. 异地备份:记忆数据不再依赖单一 VPS
  2. 版本控制:可以回溯任意时间点的记忆状态
  3. 迁移便利:未来搬迁到 PVE 只需 git clone
  4. 自动化:Cron 每日同步,无需手动干预

关键教训#

  1. 先配 .gitignore 再 git add — 顺序不能反!
  2. 敏感文件绝不提交 — 一旦提交就要重写历史
  3. PAT 定期轮换 — 安全永远是第一位

下一步优化#

  • 添加同步失败告警(Telegram 通知)
  • 压缩记忆文件后再推送(减少带宽)
  • 双向同步(GitHub → 本地,防止本地误删)

参考资源#


发布时间:2026 年 3 月 1 日
系列:AI 助手定制实践

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
GitHub 记忆同步:AI 助手的异地备份方案
https://jielumoon.top/posts/github-memory-sync-ai-assistant/
作者
Jielumoon
发布于
2026-03-01
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Jielumoon
Happy Everyday./开心每一天!
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
8
分类
3
标签
30
总字数
9,355
运行时长
0
最后活动
0 天前

目录