防止数据误删/误覆盖的兜底工具:每 N 分钟自动 git 快照受保护目录 → 推送远端 → 误删可一键找回。 零依赖(PowerShell + git),Windows 任务计划程序部署。
| 文件 | 作用 |
|---|---|
auto_snapshot.ps1 |
自动快照:对受保护目录 git add/commit/push,push 失败连续计数达阈值告警(本地日志 + 可选 webhook) |
snapshot_restore.ps1 |
只读恢复:从快照历史找回文件版本(list / preview / export),绝不写回工作区 |
- Windows 任务计划程序注册触发器,每 N 分钟运行
auto_snapshot.ps1 - 对
$ProtectedPaths(脚本顶部配置)逐目录执行 git add -A → commit(自动快照)→ push(有 origin 且领先时) - push 失败连续计数,达阈值(默认 3 次)写告警日志,可选 POST 到 webhook;成功清零
- 受保护目录可随时增删
# 注册任务:每 5 分钟运行一次(用你实际的脚本路径)
schtasks /create /tn "work-snapshot" /tr "powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\auto_snapshot.ps1" /sc minute /mo 5. .\snapshot_restore.ps1
# 1) 列出某文件最近 N 个快照版本
Invoke-Main -Mode list -RelPath "docs\plan.md" -N 15
# 2) 预览某个版本内容(拿 list 里的 Hash)
Invoke-Main -Mode preview -RelPath "docs\plan.md" -Hash <hash>
# 3) 导出到仓库之外(默认 C:\tmp,不覆盖原位)
Invoke-Main -Mode export -RelPath "docs\plan.md" -Hash <hash>- 恢复工具对工作区绝对只读:只 git log/show 读历史,从不写回
- 导出目标强制在仓库之外;落在仓库内直接拒绝(fail-closed)
- 取到的历史内容为空则拒绝导出(版本/路径不对时不产垃圾文件)
- 找回的版本放回原位由人工确认后手动执行——脚本不替你决定覆盖
- 只能恢复到磁盘本地;整盘损坏需靠远端 origin(建议配自动 push)
- 误操作发生在两次快照之间(间隔 N 分钟)会丢失该窗口改动
- 文件改名/移动需 git --follow 另行处理
- 数据层(本仓库):系统级快照 + 恢复——防误删、可回滚
- 应用层:业务系统内的快照/兜底看板——防流程数据丢失
- 两层叠加 = 完整的数据双保险
MIT