Git 2.51 已正式发布,这是 Git 向 3.0 演进的关键里程碑。主要变化如下:
1. Cruft-free Multi-pack Indexes(无冗余的多包索引)
引入了 repack.MIDXMustContainCruft 配置,用于让多包索引(MIDX)只包含可达对象,从而剔除 “cruft packs” 中的不可达对象。
在 GitHub 的 monorepo 上测试结果显示:MIDX 大小缩小约 38%、生成速度提升约 35%、读取性能提升约 5%。
2. “Path walk” 重打包机制
新的 --path-walk 选项按路径分组对象进行重打包,避免使用传统的 name-hash heuristic,生成的包通常更精简,性能与现有方式相当或更优。
3. 更强大的 Stash 表示方式
Stash 条目由一系列多个父节点的提交表示,现在支持通过 stash export 导出 stash,然后像分支或标签一样 push/pull 传输。
4. 改进 git cat-file 的表现
git cat-file --batch-check 在面对子模块时,不再显示 “missing”,而是正确识别为 “submodule”,提升脚本处理准确性。
5. 支持多个 pathspec 结合 Bloom 过滤器
使用多个路径参数(例如 git log -- path/a path/b)时,也可以利用 changed-path Bloom 过滤器,从而提高历史查询效率。
6. git switch 与 git restore 正式稳定化
这两个命令不再是实验性功能,完善了原本 git checkout 的功能分裂,让界面更加清晰且可靠。
其他亮点
内部开发流程支持更多 C99 特性,如 bool 关键字的使用已获批准,并记录哪些特性是试验性使用的 The GitHub Blog。
Git 对贡献者允许使用非法律姓名提交补丁,与 Linux Kernel 的模式更加一致 The GitHub Blog。
引入 SHA‑256 支持并提供测试选项
reftable 将成为未来的新标准引用后端
多项其他改进提升用户体验和安全性
详情查看 https://github.blog/open-source/git/highlights-from-git-2-51/