Skip to content

Releases: FnSGit/git-safety-guard

v0.1.0 — 备份后放行(首发)

Choose a tag to compare

@FnSGit FnSGit released this 01 Oct 00:53

v0.1.0 — 备份后放行(首发)

「备份后放行」型 git 安全守卫:丢弃型 git 命令(checkout --/restore/switch -f/reset --hard/clean -f/stash drop|clear)执行前自动备份 diff + untracked + stash,再放行原命令——可能该丢,但绝不无声丢。

特性

  • 双入口共享同一 core:pi 原生扩展(tool_call/tool_result 事件)+ PreToolUse hook CLI(Claude Code / Codex)
  • 备份范围无死角:staged diff + unstaged diff + untracked 文件实体 + stash 破坏类的 stash patch
  • 产物自描述:manifest.json 携带 cwd/repoRoot/triggerCommand/diffStat/版本三元组;备份落在 ~/.git-safety-guard/backups/<时间戳>/(不写 /tmp)
  • 一键恢复:git-safety-guard restore latest(自保备份 → git apply --check → 原子 apply → untracked/stash 回填)
  • fail-open:备份失败/解析失败一律放行,exit 0(备份器不是闸门)
  • cd 前缀解析:cd <other-repo> && git reset --hard 的备份落点正确,避免虚假安全感
  • 零运行时依赖,TypeScript ESM,Node ≥ 20

安装

pi

pi install git:github.com/FnSGit/git-safety-guard@v0.1.0

或下载下方 tarball:

pi install https://github.com/FnSGit/git-safety-guard/releases/download/v0.1.0/git-safety-guard-0.1.0.tgz

npm 源(pi install npm:git-safety-guard)待 npm 账号解封后启用。

npm(从 tarball)

npm install https://github.com/FnSGit/git-safety-guard/releases/download/v0.1.0/git-safety-guard-0.1.0.tgz

用法

git-safety-guard list                          # 列出备份
git-safety-guard restore latest                # 恢复最近一次
git-safety-guard restore <timestamp> --dry-run # 预览不改动
git-safety-guard restore latest --force        # 覆盖已存在文件

质量证据

  • 87 个 bun test 全通过,tsc --noEmit clean
  • 真机冒烟:pi -e 加载扩展、丢弃命令触发备份、manifest.agent="pi"、cd 解析后 repoRoot 指向目标仓库
  • npm pack 21 kB / 27 files(不含 tests/node_modules)

详见 设计 spec 与 实施计划。

已知边界

  • ~user/... 波浪号不展开(v0.2 待办)
  • 不做 shell 解析,引号内文本可能误报(备份无副作用,成本低)
  • 恢复不重建 stash 栈(patch 以 git apply 回填工作树)
  • untracked > 500 文件只记录清单不备份实体内容(manifest 标注 untrackedTruncated)