Skip to content
omeyang edited this page Sep 17, 2026 · 2 revisions

Pomona

按分支 tip 保留压缩包、清除历史旧版本的 git 瘦身工具。面向离线部署类仓库:很多个长期保留的发布分支,每个分支带一个几百 MB 的包,历史里堆积了大量被淘汰的旧版本,.git 越来越大。Pomona 让每个分支只保留它 tip 当前的那个包,删掉该路径在历史里被淘汰的所有旧版本,跨全部分支一次完成;提交历史拓扑、分支、各分支当前的包都原样保留。

Rust 编写,提供 x86_64、ARM64 静态 musl 二进制 git-pomona,放进 PATH 即是 git pomona 子命令。目标机器只需要 git,不需要 Python,也不需要 git-filter-repo。

快速开始

从 最新 Release 下载对应架构的二进制,按 安装与升级 校验后放入 PATH。

git pomona analyze /path/to/本地克隆 --auto-detect -o pomona-plan.toml   # ① 只读分析,产出 plan
git pomona clean pomona-plan.toml --workdir /tmp/cleaned.git             # ② 建镜像、重写历史、自检
git pomona push /tmp/cleaned.git                                         # ③ dry-run:只打印将执行的推送
git pomona push /tmp/cleaned.git --yes                                   #    确认后强推回远程

三步之间通过文件交接,可以分别检查、分别重跑。push --yes 之前,你的本地克隆和远程都不会被改动。详见 使用指南。

文档导航

页面 内容
安装与升级 下载、校验、安装、升级
使用指南 三个子命令的完整参数、交互模式、plan 文件格式、清理后的重新同步
工作原理与安全性 为什么必须重写历史、镜像如何拿到全部分支、原生重写引擎、两道自检
识别规则与 hooks 包是怎么识别的、profile 配置文件、pre-push / post-push hooks
开发与发布 构建、测试、源码组织、GitHub Actions 和 Wiki 维护

名字来源

Pomona 是古罗马果园女神。奥维德《变形记》第十四卷写她「不持标枪,右手持弯曲的修枝刀,用来压制过度生长、剪去四处蔓延的枝条」。借用这一典故,为 git 仓库剪去历史里枯死的旧包,留下每根枝头当前结的果。典故来源:Ovidius, Metamorphoses XIV(拉丁原文)

项目名为 Pomona,命令为 git pomona。采用 MIT 许可证。

Clone this wiki locally