GitHub 记忆同步:AI 助手的异地备份方案
1671 字
8 分钟
GitHub 记忆同步:AI 助手的异地备份方案
核心目标:为 AI 助手箱宝实现记忆的异地版本化备份,防止 VPS 数据丢失,同时为未来迁移到 PVE 小主机做准备。
缘起:为什么需要记忆同步?
箱宝是我的 OpenClaw AI 助手,拥有完整的”记忆系统”:
- 短期记忆:
memory/YYYY-MM-DD.md— 每日对话日志 - 长期记忆:
MEMORY.md— curated 重要决策和上下文 - 档案:
memory/archive/— 归档的旧日记
风险点:
- VPS 故障可能导致记忆数据丢失
- 未来迁移到 PVE 小主机时需要完整迁移记忆
- 需要版本控制追踪记忆变更历史
解决方案:使用 GitHub 私有仓库进行异地备份,通过 Cron 定时自动推送。
一、仓库准备
1.1 创建私有仓库
在 GitHub 创建私有仓库 xiangbao-memory:
# 仓库信息- URL: https://github.com/Jielumoon/xiangbao-memory- 可见性:Private(记忆含敏感上下文)- 初始化:不添加 README(本地已有完整内容)1.2 生成 GitHub PAT
创建 Personal Access Token(Fine-grained 或 Classic 均可):
# 权限需求- repo (Full control of private repositories)# 或者 Fine-grained:- Contents: Read and write⚠️ 安全警告:PAT 必须保存在安全位置,不要提交到 Git 历史!
二、本地 Git 配置
2.1 初始化仓库
在 OpenClaw workspace 目录初始化 Git:
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.git2.2 配置 .gitignore(关键!)
⚠️ 血泪教训:首次提交时误追踪了大量敏感文件,包括:
docker/cli-proxy/auths/— 900+ 个 API 凭证 JSONdocker/ds2api-runtime/config.json— API Keybackup/*.tar.gz— 大型备份文件(触发 GitHub LFS 警告).trash/— 临时删除文件
正确的 .gitignore 配置:
# 敏感凭证**/auths/*.json**/secrets/*.json**/*.env
# 大型文件backup/*.tar.gzbackup/*.zipmedia/outbound/*.pngmedia/outbound/*.jpg
# 临时文件.trash/tmp/*.log
# 系统文件.DS_StoreThumbs.db
# 其他 Git 仓库(避免嵌套)blog/.gitskills/*/.git2.3 首次提交
# 添加所有文件git add .
# 检查是否有大文件(>50MB 会警告)git status
# 提交git commit -m "🧠 初始化箱宝记忆备份 2026-02-28"
# 推送git branch -M maingit push -u origin main三、敏感文件清理(如果已误提交)
如果像箱宝一样不小心提交了敏感文件,需要彻底清理:
3.1 从 Git 历史移除(不删除本地文件)
# 移除已追踪的敏感目录git rm --cached -r docker/cli-proxy/auths/git rm --cached -r backup/
# 提交清理git commit -m "🔒 移除敏感文件:cpa 凭证、ds2api 配置、备份文件"
# 强制推送(⚠️ 会重写历史)git push -f origin main3.2 如果已推送到 GitHub
⚠️ 严重警告:即使 git push -f,敏感文件仍然存在于 GitHub 历史中!
正确做法:
- 立即更换泄露的 API Key / PAT
- 使用
git filter-branch或 BFG Repo-Cleaner 彻底清理历史 - 或者:删除仓库重新创建(箱宝的选择)
四、Cron 自动化同步
4.1 创建同步脚本
#!/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 fielse echo "[$(date '+%Y-%m-%d %H:%M:%S')] 工作区干净,无需同步"fi4.2 配置 Cron 任务
# 编辑 crontabcrontab -e
# 添加每日同步任务(每天 02:00)0 2 * * * /root/.openclaw/workspace/scripts/memory-sync.sh >> /var/log/memory-sync.log 2>&14.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 安全管理
# ✅ 正确做法- 使用 Fine-grained PAT(限制权限范围)- 设置过期时间(如 90 天)- 保存在安全位置(密码管理器、加密文件)- 定期轮换
# ❌ 错误做法- PAT 明文写在脚本里- 提交 PAT 到 Git 历史- 使用永不过期的 Classic PAT5.2 .gitignore 检查清单
在首次推送前,务必检查:
# 检查是否有大文件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 提交前审查
# 查看将要提交的内容git statusgit diff --staged
# 如果有不确定的文件git ls-files --others --exclude-standard六、恢复与迁移
6.1 从 GitHub 恢复记忆
如果 VPS 数据丢失,可以从 GitHub 恢复:
# 克隆仓库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 小主机时:
# 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 潜在问题
-
大文件警告:单个文件 >50MB 会警告,>100MB 拒绝
- 解决:
.gitignore排除backup/*.tar.gz
- 解决:
-
Git 历史膨胀:频繁提交大文件会导致仓库膨胀
- 解决:只追踪
memory/和MEMORY.md
- 解决:只追踪
-
敏感信息泄露:误提交 API Key
- 解决:提交前审查 +
.gitignore严格配置
- 解决:提交前审查 +
八、效果与监控
8.1 同步日志
查看同步日志:
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可以看到:
- 每次同步的时间
- 变更的文件
- 提交消息(含日期)
总结
核心收获
- 异地备份:记忆数据不再依赖单一 VPS
- 版本控制:可以回溯任意时间点的记忆状态
- 迁移便利:未来搬迁到 PVE 只需
git clone - 自动化:Cron 每日同步,无需手动干预
关键教训
- 先配 .gitignore 再 git add — 顺序不能反!
- 敏感文件绝不提交 — 一旦提交就要重写历史
- PAT 定期轮换 — 安全永远是第一位
下一步优化
- 添加同步失败告警(Telegram 通知)
- 压缩记忆文件后再推送(减少带宽)
- 双向同步(GitHub → 本地,防止本地误删)
参考资源
发布时间:2026 年 3 月 1 日
系列:AI 助手定制实践
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
GitHub 记忆同步:AI 助手的异地备份方案
https://jielumoon.top/posts/github-memory-sync-ai-assistant/ 相关文章 智能推荐
1
FRP 内网穿透:用 VPS 远程访问家里的 NAS
技术 通过 frp 实现内网穿透,从外网安全访问家庭 NAS 和其他内网服务
2
N150小主机搭建小型数据中心:PVE虚拟化+单线多拨+容器NewAPI
技术 记录从零开始搭建PVE虚拟化环境,实现IStoreOS网关单线多拨、fnOS NAS部署、OpenClash代理分流、NewAPI大模型聚合的完整系统
3
关于IStoreOS单线多拨配置
技术 2025-10-15
4
测试与探索:博客功能的全面体验
技术 这是一篇测试文章,用于验证博客的各项功能,包括文本格式、图片显示、代码高亮等特性
5
《重构》读后感:改善代码质量的实践指南
读书笔记 分享阅读 Martin Fowler《重构》一书的收获,探讨如何通过重构技术改善代码质量和可维护性
随机文章 随机推荐