Git 2.50:大型存储库等的性能改进

git-2.50

前几天公布了 Git 2.50 项目新版本发布, 引入 600 多项变革 由一个活跃的社区推动,这次包括 98 名开发人员,其中包括 35 名新贡献者。

Git 2.50 新版本的亮点是集成了新的命令(git-diff-pairs),清理、过滤和维护的新功能,用 ORT 替换了递归合并引擎,以及性能改进和错误修复。

Git 2.50关键新功能

在 Git 2.50 的新版本中,最重要的新功能之一是 优化所谓的“cruft packs”处理, 也就是说,包含无法访问或未被分支或标签引用的对象。传统上,Git 将这些对象存储在一个大型的包文件中,这在重新打包包含大量此类项目的存储库时可能会导致性能问题。

随着新版本的推出, Git 允许你将这些垃圾包拆分成几个较小的文件,从而减少磁盘使用量并提高批量操作的输入/输出性能。此外,并输入选项 –combine-cruft-below-size,这允许 更灵活地将小包组合成一个 与之前的 –max-cruft-size 选项相比,它不会对合并文件大小施加限制。此新功能对于孤立对象分散在多个包中的项目尤其有用。

针对大型存储库的另一项改进是 实验支持 增量更新 MIDX指数 哪个 它们将有关对象的信息存储在不同的层中 使用位图文件,可以在添加新提交时更快地进行更新。对于需要快速索引操作且无需完全重建元数据的大型存储库而言,这一改进至关重要。

用 ORT 完全替换递归合并引擎

Git 2.50 引入了一项重大变化 永久删除递归融合引擎 传统。相反, ORT 的使用得到巩固,一 更现代、更易于维护、更高效的融合引擎。 ORT 不仅提供更精确的冲突分析,还允许您在不生成额外对象的情况下验证合并是否可行。此外,merge-tree 命令现在包含一个 –quiet 选项,可用作静默合并检查器,而无需修改存储库。

gitt-diff-pairs:可扩展性问题的解决方案

代码审查无疑是现代协作开发的支柱之一,而修订版本之间的差异或差异在此过程中起着至关重要的作用。随着 Git 2.50 的到来,引入了一个专为可扩展性而设计的解决方案:新的 git-diff-pairs 命令。

传统上,要比较两个修订版本,可以使用如下命令:

git diff HEAD~1 HEAD

这将生成一个包含所列修订版本之间所有更改的完整补丁。虽然这在很多情况下都很有效,但在处理大量修改文件时可能会出现性能问题。

这就是为什么 git-diff-pairs 专门设计用于直接从 git diff-tree 的输出接收原始输入,并高效、准确地生成相应的补丁。

使用方法非常简单:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

此命令获取提供的 blob 对并生成精确的 diff 输出,保留上下文信息并允许将工作拆分成更小的批次。这为并行处理打开了大门,提高了资源效率,并促进了 GitLab 等基于 diff 的工具的可扩展性。

清洁、过滤和维护的新功能

Git 2.50 包含几个旨在改善存储库维护的附加工具:

  • 命令已添加 git reflog drop,它允许您完全删除特定分支的 reflog,非常适合在您不再需要维护以前的引用时清理您的工作历史。
  • 选择 -筛选 cat-file –batch 现在可在 git 中使用,允许您按对象类型过滤结果。

此外,还强调了几项内部优化:

  • 改进符号链接的使用,具有前缀缓存和减少冗余检查。
  • 删除文档和测试脚本中的 Perl 依赖项,用 shell 函数或 C 实现替换它们,使它们更容易在具有极简配置的系统上进行编译。
  • 包含控制器 用户差异 用于分析 .ini 文件中的差异。
  • 提高了 git send-email 命令与 Outlook 等 SMTP 服务器的兼容性。

最后,如果您有兴趣了解更多,可以查阅详情 以下链接。