Git 2.39 源代码控制发布

经过两个月的开发,分布式源码控制系统Git 2.39已经发布。 Git 是最流行、可靠和高性能的版本控制系统之一,提供基于分支和合并的灵活的非线性开发工具。 为了确保历史记录的完整性和对追溯更改的抵抗力,在每次提交中都会使用整个先前历史记录的隐式哈希;还可以使用开发人员的数字签名来验证各个标签和提交。

与之前版本相比,新版本共包含 483 处变更,由 86 名开发人员参与准备,其中 31 名开发人员首次参与开发。 主要创新点:

  • “git Shortlog”命令旨在显示更改历史记录中的统计信息摘要,它添加了一个“-group”选项,用于按不限于作者或提交者的字段对提交进行任意分组。 例如,要显示开发人员列表以及有关更改数量的信息,考虑到“共同作者”字段中提到的帮助程序,您可以使用以下命令: git Shortlog -ns --group=author - -group=trailer:共同创作者

    Shortlog 输出可以使用格式说明符进行聚合,并且“--group”选项可以显着简化复杂报告的创建,并且无需额外的排序命令。 例如,要创建一个报告,其中包含有关每月接受给定版本的提交数量的信息,您可以指定: git Shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 以前,要执行类似的操作,需要使用 sort 和 uniq 实用程序: git log v2.38.0 .. —date='格式:%Y -%m' —format='%cd' | 排序| 优衣库-c

  • “cruft packs”机制的功能已得到扩展,该机制旨在打包未在存储库中引用的无法访问的对象(未由分支或标签引用)。 无法访问的对象由垃圾收集器删除,但在删除之前会在存储库中保留一段时间,以避免竞争情况。 “cruft packs”机制允许您将所有无法访问的对象存储在一个包文件中,并在单独的表中显示每个对象的修改时间数据,该表存储在扩展名为“.mtimes”的单独文件中,以便它们能够不与总修改时间重叠。

    无法访问的对象在实际删除之前在存储库中保留的时间长度由“--prune=”选项决定” 然而,虽然在删除之前延迟是防止由于竞争条件导致存储库损坏的一种相当有效且实用的方法,但它并不是 100% 可靠。 为了更容易地恢复损坏的存储库,新版本通过在“git repack”命令中添加“--expire-to”选项提供了保存丢失对象的功能,该选项允许您指定一个文件来创建外部所有已删除对象的副本。 例如,要将过去 5 分钟内未更改的无法访问的对象保存在 backup.git 文件中,可以使用命令: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • 在使用部分克隆(稀疏检出)且存在部分索引(稀疏索引)的区域中搜索时,显着提高(高达 70%)“git grep -cached”操作的速度。 以前,当指定“-cached”选项时,首先在常规索引中执行搜索,然后在部分索引中执行搜索,这导致在大型存储库中搜索时出现明显的延迟。
  • 在“git push”操作期间将新对象放入存储库之前,服务器对新对象一致性的验证已加快。 通过切换到在检查时仅考虑已声明的链接,在具有 7 万个链接的测试存储库中,其中只有 3% 被推送操作覆盖,引入的优化可以将检查时间减少 4.5 倍。
  • 为了防止代码中潜在的整数溢出,“git apply”命令限制了可以处理的补丁的最大大小。 如果补丁大小超过 1 GB,现在将显示错误。
  • 为了防止潜在的漏洞,当将 h2h3 模块与 GIT_TRACE_CURL=1 或 GIT_CURL_VERBOSE=1 选项与 HTTP/2 一起使用时,已进行更改以清除标头集中不必要的信息。
  • 当对作为另一个分支的符号链接的分支执行签出时,“git symbolic-ref HEAD”命令现在显示目标分支的名称而不是符号链接的名称。
  • 添加了对“--edit-description”选项(“gitbranch —edit-description @{-1}”)的 @{-1} 参数的支持,用于编辑上一个分支的描述。
  • 添加了“git merge-tree --stdin”命令以通过标准输入传递参数列表。
  • 在网络文件系统上,默认情况下禁用监视文件系统中更改的 fsmonitor 处理程序。

来源: opennet.ru

添加评论