Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

work-snapshot · 自动工作快照 + 只读恢复

防止数据误删/误覆盖的兜底工具:每 N 分钟自动 git 快照受保护目录 → 推送远端 → 误删可一键找回。 零依赖(PowerShell + git),Windows 任务计划程序部署。

组成

文件 作用
auto_snapshot.ps1 自动快照:对受保护目录 git add/commit/push,push 失败连续计数达阈值告警(本地日志 + 可选 webhook)
snapshot_restore.ps1 只读恢复:从快照历史找回文件版本(list / preview / export),绝不写回工作区

快照机制(自动)

  1. Windows 任务计划程序注册触发器,每 N 分钟运行 auto_snapshot.ps1
  2. $ProtectedPaths(脚本顶部配置)逐目录执行 git add -A → commit(自动快照)→ push(有 origin 且领先时)
  3. push 失败连续计数,达阈值(默认 3 次)写告警日志,可选 POST 到 webhook;成功清零
  4. 受保护目录可随时增删

部署(Windows 任务计划)

# 注册任务:每 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>

安全铁律(防止兜底工具自己变成事故)

  1. 恢复工具对工作区绝对只读:只 git log/show 读历史,从不写回
  2. 导出目标强制在仓库之外;落在仓库内直接拒绝(fail-closed)
  3. 取到的历史内容为空则拒绝导出(版本/路径不对时不产垃圾文件)
  4. 找回的版本放回原位由人工确认后手动执行——脚本不替你决定覆盖

已知边界(诚实登记)

  • 只能恢复到磁盘本地;整盘损坏需靠远端 origin(建议配自动 push)
  • 误操作发生在两次快照之间(间隔 N 分钟)会丢失该窗口改动
  • 文件改名/移动需 git --follow 另行处理

分层配合

  • 数据层(本仓库):系统级快照 + 恢复——防误删、可回滚
  • 应用层:业务系统内的快照/兜底看板——防流程数据丢失
  • 两层叠加 = 完整的数据双保险

License

MIT

About

Automatic work snapshot + read-only restore: git snapshot protected dirs every N minutes, push to remote, recover accidentally deleted/overwritten files. MIT.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages