# work-snapshot **Repository Path**: kongminos/work-snapshot ## Basic Information - **Project Name**: work-snapshot - **Description**: Automatic work snapshot + read-only restore: git snapshot protected dirs every N minutes, push to remote, recover accidentally deleted/overwritten files. MIT. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-21 - **Last Updated**: 2026-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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 任务计划) ```powershell # 注册任务:每 5 分钟运行一次(用你实际的脚本路径) schtasks /create /tn "work-snapshot" /tr "powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\auto_snapshot.ps1" /sc minute /mo 5 ``` ## 恢复流程(误删/误覆盖后) ```powershell . .\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 # 3) 导出到仓库之外(默认 C:\tmp,不覆盖原位) Invoke-Main -Mode export -RelPath "docs\plan.md" -Hash ``` ## 安全铁律(防止兜底工具自己变成事故) 1. 恢复工具对工作区**绝对只读**:只 git log/show 读历史,从不写回 2. 导出目标强制在**仓库之外**;落在仓库内直接拒绝(fail-closed) 3. 取到的历史内容为空则拒绝导出(版本/路径不对时不产垃圾文件) 4. 找回的版本放回原位由**人工确认后手动执行**——脚本不替你决定覆盖 ## 已知边界(诚实登记) - 只能恢复到磁盘本地;整盘损坏需靠远端 origin(建议配自动 push) - 误操作发生在两次快照之间(间隔 N 分钟)会丢失该窗口改动 - 文件改名/移动需 git --follow 另行处理 ## 分层配合 - **数据层**(本仓库):系统级快照 + 恢复——防误删、可回滚 - **应用层**:业务系统内的快照/兜底看板——防流程数据丢失 - 两层叠加 = 完整的数据双保险 ## License MIT