为什么要这么做?
想象一下:
- Dropbox 是您的“搬运工”,负责帮您把笔记在电脑和手机之间搬来搬去(实时同步)。
- GitHub 是您的“时光机”。如果未来您用 AI 整理笔记时,AI 发疯删了您一半的文件,Dropbox 会老实地把这些删除同步到所有设备(灾难!)。但 GitHub 会保留昨天的版本,您可以随时“穿越回去”找回数据。
目标: 每天自动把笔记备份到 GitHub,且带有“熔断机制”(如果 AI 删太多文件,备份会自动停止报警)。
第一步:在云端建个“保险库” (GitHub)
我们要先在 GitHub 上申请一个存放笔记的地方。
- 登录 GitHub.com。
- 点击右上角的
+号,选择New repository。 - Repository name (仓库名):填
Obsidian-Backup。 - Privacy (隐私):一定要选
Private(私有)!这是您的私人笔记。 - Initialize (初始化):什么都别勾选! (不要点 Add README file)。
- 点击绿色按钮
Create repository。 - 创建好后,找到页面上的
SSH按钮(通常在 Quick setup 区域),点击它,然后复制那个以git@github.com...开头的地址。先记在记事本里。
第二步:给电脑配把“钥匙” (配置 SSH)
为了让电脑自动备份不弹窗输密码,我们需要配一把“电子钥匙”。
1. 打开黑窗口:在电脑搜索栏输 cmd,回车打开“命令提示符”。
2. 告诉 Git 你是谁 (复制下面两行,把名字邮箱改成你的,右键粘贴进黑窗口,回车):
git config --global user.name "您的GitHub用户名"
git config --global user.email "您的GitHub注册邮箱"
3. 生成钥匙 (复制粘贴,一路按回车,不要设密码,直到结束):
ssh-keygen -t ed25519 -C "ObsidianKey"
4. 把钥匙给 GitHub:
- 在黑窗口输:
clip < %userprofile%\.ssh\id_ed25519.pub(这会自动复制钥匙内容)。 - 回到 GitHub 网页 -> 点击右上角头像 -> Settings -> 左侧 SSH and GPG keys。
- 点击绿色的 New SSH key。
- Title:随便填,比如
My PC。 - Key:粘贴刚才复制的一长串乱码。
- 点击 Add SSH key。
第三步:第一次手动“握手”
这一步必须做一次,脚本才能接手。
- 在黑窗口里,进入您的笔记文件夹:
cd /d "D:Dropbox\Obsidian"
- 依次执行下面这几行“咒语”(每行输完按回车):
git init
git branch -M main
- 关联仓库 (把下面地址换成第一步里您复制的那个
git@...地址):
git remote add origin git@github.com:您的用户名/Obsidian-Backup.git
- 创建忽略名单 (防止 Dropbox 冲突文件干扰):
- 打开您的 Obsidian 文件夹。
- 新建一个文本文件,命名为
.gitignore.(注意前后都有点,系统会自动去掉最后的点)。 - 用记事本打开它,粘贴以下内容并保存:
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.obsidian/cache
.trash/
*conflicted copy*
Thumbs.db
- 首次推送 (这是唯一一次需要手动操作):
git add .
git commit -m "第一次人工备份"
git push -u origin main
(如果提示 Are you sure...,输 yes 回车)。
看到 Branch 'main' set up to track... 就说明成功了!
第四步:部署“智能保镖” (Python 脚本)
这个脚本是核心,它会检查是不是删了太多文件,如果是,它会阻止备份。
- 在
D:\Dropbox\这个目录下(不要放在 Obsidian 文件夹里面,放在外面一层),新建一个文本文档。 - 重命名为
Obsidian_Backup_Script.py(确保后缀是 .py 不是 .txt)。 - 右键 -> Edit with IDLE (或者用记事本打开),粘贴以下完整代码:
import subprocess
import os
import datetime
import sys
# ================= ⚙️ 这里是您的配置 =================
# 您的笔记库路径
VAULT_PATH = r"D:\Dropbox\Obsidian"
# 日志文件放在笔记库里,方便您随时看
LOG_FILE = os.path.join(VAULT_PATH, "backup_log.txt")
# 【安全阈值】
# 如果一天内删除了超过 5 个文件,或者总变动超过 50 个文件
# 脚本会认为是 AI 发疯了,自动停止备份,保留 GitHub 上的旧版本
DELETE_THRESHOLD = 5
CHANGE_THRESHOLD = 50
# ====================================================
def write_log(message):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_str = f"[{timestamp}] {message}"
try:
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(log_str + "\n")
except:
pass
def run_backup():
if not os.path.exists(VAULT_PATH):
return
os.chdir(VAULT_PATH)
try:
# 1. 检查变动
status_output = subprocess.check_output(
["git", "status", "--porcelain"],
text=True,
encoding='utf-8',
stderr=subprocess.STDOUT
)
changes = [line for line in status_output.split('\n') if line.strip()]
total_changes = len(changes)
if total_changes == 0:
write_log("✅ 无变动,跳过备份。")
return
# 2. 检查删除了多少文件
deleted_count = 0
for line in changes:
if line.strip().startswith('D ') or line.strip().startswith('AD'):
deleted_count += 1
# 3. 熔断判定(安全检查)
if deleted_count > DELETE_THRESHOLD:
write_log(f"🛑 危险!检测到删除了 {deleted_count} 个文件。备份已强制中止!请检查。")
return
if total_changes > CHANGE_THRESHOLD:
write_log(f"🛑 警告!检测到 {total_changes} 个大量变动。备份已中止。")
return
# 4. 执行备份
date_str = datetime.datetime.now().strftime("%Y-%m-%d")
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", f"Auto Backup: {date_str}"], check=True)
subprocess.run(["git", "push", "origin", "main"], check=True)
write_log(f"🚀 备份成功!同步了 {total_changes} 个变动。")
except Exception as e:
write_log(f"❌ 出错: {str(e)}")
if __name__ == "__main__":
run_backup()
第五步:定个“闹钟” (Windows 计划任务)
最后,让 Windows 每天晚上自动运行这个脚本,并且不弹黑框。
- 按键盘
Win + R,输入taskschd.msc,回车。 - 点击右边的 “创建基本任务”。
- 名称:
Obsidian Git Backup-> 下一步。 - 触发器:每天 -> 下一步 -> 时间设为 22:00 (建议设在您用完 AI 之后) -> 下一步。
- 操作:启动程序 -> 下一步。
- 配置详情 (这是重点!):
- 程序或脚本:我们要用无窗口模式的 Python。请填入:
pythonw.exe
(如果系统提示找不到,请填完整路径,通常是C:\Users\您的用户名\AppData\Local\Programs\Python\Python3x\pythonw.exe) - 添加参数:(填脚本的路径,记得加引号)
"D:\Dropbox\Obsidian_Backup_Script.py" - 起始于:(填脚本所在的文件夹)
D:\Dropbox\
- 程序或脚本:我们要用无窗口模式的 Python。请填入:
- 点击 完成。
- 最后微调:
- 在列表里双击这个任务。
- 在“常规”里,确保勾选 “只在用户登录时运行” (这能保证它能读到您的 SSH 钥匙)。
- 点击确定。
🎉 大功告成!如何验证?
明天早上,或者您现在手动右键任务点击“运行”后:
- 打开您的 Obsidian 笔记文件夹。
- 找一个叫
backup_log.txt的文件。 - 如果看到
🚀 备份成功,恭喜您,您的数据现在有了实时同步 + 防灾历史的双重保护!
以后如果 AI 误删了文件,不要惊慌:
- 打开
backup_log.txt,您会看到🛑 危险!检测到删除...,说明脚本成功拦截了错误的同步。 - GitHub 上的文件依然是安全的旧版本。