给 git 历史中被删除的文件立碑:路径、作者、生卒日期、存活天数、最后大小,外加一段由路径哈希确定性挑选(或 AI 定制)的墓志铭,输出可分享的深色 HTML「墓园墙」或终端悼念名单。纯 Python 标准库,默认零网络。
每个仓库都埋葬过一摞代码:legacy_parser.py、tmp_fix_v2.py、某个「下周就删但删了三年的模块」……它们没有墓碑,没有名字,git log 里只剩一行 D。GitGrave 把它们挖出来,为每一行死去(或刚死)的代码举行一场体面的葬礼:哪一天出生、谁写的、活了多久、死的时候多重,以及一句墓志铭。产出可以直接截图的「墓园墙」,也适合在 README/播客/述职里当梗。
无需安装任何第三方包(仅标准库)。克隆后直接运行:
git clone https://github.com/your-name/gitgrave.git
cd gitgrave
python -m gitgrave --help可选:pip install . 装出 gitgrave 命令(依然零第三方依赖)。
# 为当前仓库立碑:终端墓园列表
python -m gitgrave .
# 生成深色单文件「墓园墙」HTML(可分享/打印)
python -m gitgrave . --html grave.html
# 一条 git alias,整个仓库随时可祭扫
git config --global alias.grave "!python -m gitgrave . --html grave.html"
# 可选:AI 定制墓志铭(OpenAI 兼容接口;无 key 自动降级为本地模板)
python -m gitgrave . --html grave.html --ai-key $OPENAI_API_KEY🪦 GITGRAVE 死代码墓园 · 悼念名单
==============================================================
墓碑 1 legacy/old_parser.py
生辰 2020-03-11 忌日 2023-07-02
存活 1208 天 最后身量 34.2 KiB 创造者 Alice → 送葬者 Bob
│ 此处曾有一片代码森林,现已被重构夷平。享年 1208 天。
--------------------------------------------------------------
--html 产出的墓园墙是深色主题的墓碑卡片网格(CSS Grid),每座碑含 ✝ 碑头、生卒日期、存活天数、创造者/送葬者与斜体墓志铭,单文件零外部资源,浏览器打开即可。
- 本地模板(默认,零网络):内置 12 条中文/英文风格化短句池,按
sha256(路径)哈希确定性挑选(同一路径永远同一句),并插入存活天数插值。 - AI 定制(可选):
--ai-endpoint https://.../chat/completions --ai-key <KEY>调 OpenAI 兼容接口逐碑生成;--ai-model/--ai-max控制模型与调用上限。 - 优雅降级:未提供
--ai-key或接口调用失败(网络/HTTP/解析错误)时,自动回退到本地模板并向 stderr 提示原因,进程照常成功退出。
- v0.1.0:删除文件墓碑扫描(生卒提交/日期/存活天数/最后大小)+ 模板墓志铭 + HTML 墓园墙 + TUI
- 函数级(非文件级)死亡追踪:按 diff 块识别被删函数并统计生存行数
-
--range限定分支/时间窗、--author过滤 - 重命名链追踪:显示「旧名之死」与「新名之生」的因果
- GitHub Actions 定时生成并发布墓园墙到 Pages
- 只追踪当前分支可达历史中被删除的文件;浅克隆下出生信息可能缺失(会以死亡信息兜底)。
- 在仓库内子目录运行时,按 git 语义会扫描整个外层仓库(git 的作用域是仓库而非子目录)——这是有意行为。
- 「出生」取该路径在历史中首次出现的提交;若文件被删除后复活再被杀,墓碑只立一块(首末各一次)。
- 大小取死亡提交父提交中该 blob 的字节数;极端路径(含换行符等)可能解析异常。
MIT © 2025 gitgrave contributors
$ python -m gitgrave --help
usage: gitgrave [-h] [--html FILE] [--ai-endpoint URL] [--ai-key KEY]
[--ai-model MODEL] [--ai-max N] [--version]
[repo]
死代码讣告墓园:挖掘 git 历史中被删除的文件,为其立碑(路径、作者、生卒日期、存活天数、最后大小)并配墓志铭,输出深色 HTML 墓园墙或终端列表。纯标准库,默认零网络。
positional arguments:
repo Git 仓库路径(默认当前目录)
options:
Issues and PRs welcome - run pytest locally before submitting.