Git 删除引用慢?C 代码优化提速 18%

Optimizing Reference Deletions in Git

在 Git 的 files backend 中,删除 packed refs 需要重写整个 packed-refs 文件,这对拥有数百万引用的大型 monorepo 来说极其缓慢。为了探索 Rust 在 Git 项目中的潜力,我用 LLM 生成了 Rust 版本的 files backend 进行对比测试,意外发现 Rust 版本比 C 原生版本更快。深入分析后,我发现 C 代码在遍历未修改引用时,竟无谓地调用 fprintf 重新格式化数据,而 Rust 版本则直接原样写入。修复这个 C 代码中的低效逻辑后,删除性能提升了 18%,与 Rust 版本持平。这个补丁已被合并到 Git master 分支,即将在 Git v2.98 中发布。

这个问题源于 files backend 的设计,显然的解决方案是逐步将仓库迁移到更新的 reftable backend。

同日更多故事

2026-11-11