经过两个月的紧张工作, Git 推出 Git 2.51 版本, 更新 它汇集了 506 项变更,共有 91 名开发人员参与, 其中21人为首次捐款。
此版本引入了旨在提高性能和简化存储库管理的改进,包括对 git-push 和 git-fetch 的性能优化,以及向新的 3.x 分支迈进的几项变化。
Git 2.51关键新功能
Git 2.51 的一大亮点是 优化 git push 和 git fetch 命令 在具有大量参考文献的存储库中。 这次改进的关键在于批量更新它在一次交易中处理多个链接,而不是单独处理。
由于这一优化, reftable 后端现在比传统文件后端表现更好。在包含多达 10 个引用的存储库测试中,git fetch 性能对于 reftable 提高了 000 倍,对于文件提高了 22 倍,而 git push 性能分别提高了 1.25 倍和 18 倍。
另一项重要创新是引入所谓的 cruft 包, 用于存储未链接到分支或标签的无法访问的对象。这些对象以前分散在 现在可以单独包装管理s,这使得它们更易于控制并减少了多包索引(MIDX)的大小。
随着 新的 repack.MIDXMustContainCruft 设置,Git 避免在主索引中包含这些对象在 GitHub 上的测试中,此配置将索引大小减少了 38%,写入速度提高了 35%,读取速度提高了 5%。
对象包装的新方法
El git pack-objects 命令包含 –path-walk 选项, 引入了一种创新方法 重新组织包装文件。 Git 现在不再根据对象的哈希值来处理对象,而是根据它们的文件路径进行迭代,将共享相同位置的对象打包在一起。这种方法无需预先对对象进行排序,从而生成更小、更高效的打包文件。
也有这个版本 用于交换使用 Git Stash 创建的工作树状态和索引的新格式已经标准化。。现在可以像分支或标签一样导出和导入存储,从而更容易将状态从一个系统移动到另一个系统。
例如:
git stash 导出 --to-ref refs/stashes/mi-stash git push origin refs/stashes/mi-stash git fetch origin '+refs/stashes/*:refs/stashes/*' git stash 导入 refs/stashes/mi-stash
经典命令的改进
几个 Git 命令已收到相关更新:
- git cat-file 现在报告丢失的对象和子模块,显示标识符而不是仅仅标记“丢失”。
- git log 受益于布隆过滤器优化,加快了使用多个文件路径的搜索。
- git switch 和 git restore 命令自 2019 年以来一直被视为实验性的,最终稳定下来,成为 git checkout 的现代替代品。
- git whatchanged 命令(相当于 git log –raw)已被弃用并将在 Git 3.0 中删除。
- git for-each-ref 接收 –start-after 选项,该选项与 –count 一起允许对输出进行分页。
- git merge 和 git pull 现在包含 –compact-summary 选项,它提供了更简洁的摘要格式。
C99 支持和新的贡献规则
Git 不断调整其代码以适应 C9 标准的特性9. 尽管自 2021 年起就需要兼容的编译器,但开发人员仍在谨慎行事,以保持与仅部分实现的编译器的兼容性。
此外,捐款政策也进行了重大变化: 现在可以用假名提交补丁,这一决定符合 Linux 内核的规则,旨在为贡献者提供更大的灵活性。
展望 Git 3.0
El 开发团队还将路线图更新至 Git 3.0。其中两个关键变化尤为突出:默认使用 SHA-256 作为对象标识符,并采用 reftable 格式存储分支和标签引用。这些改进旨在提高日益庞大和复杂的存储库的安全性和效率。
数据来源: https://lore.kernel.org