Git 2.37 正式发布,支持修剪不可达对象、稀疏索引可广泛使用


Git 2.37 已正式发布。

主要变化

  • 新增用于修剪不可达对象 (unreachable object) 的机制
  • 新增适用于 Windows 和 macOS 的内置文件系统监视器
  • 稀疏索引 (sparse index) 已可以广泛使用

修剪不可达对象

在 Git 中,对象可被分类为“可达”和“不可达”。当至少有一个引用(分支或标签)时,一个对象是“可达的”,你可以从该引用开始一个对象遍历(从提交遍历到其父级,从树遍历到其子树,等等),然后在目的地结束。类似地,当不存在这样的引用时,一个对象是“不可达”的。

Git 2.37 引入了一个新概念 cruft packs,它允许将“不可达”对象一起存储在单个包文件中,方法是将各个对象的 age 写入存储在包旁边的*.mtimes文件的辅助表中。

在实践中,它们可以允许仓库以更长的宽限期来进行修剪,而不必担心创建许多松散对象的可能性。通过运行下方命令进行尝试:

$ git gc --cruft --prune=1.day.ago

内置文件系统监视器

工作目录大小是显著影响 Git 性能的其中一个因素,

例如,当你运行git status.git 时,Git 必须爬取你的整个工作目录(在最坏的情况下)才能确定哪些文件已被修改。

Git 对文件系统有自己的 cached understanding,以避免在许多情况下进行整个目录遍历。但是对于 Git 来说,在工作时使用磁盘的实际状态更新对文件系统的 cached understanding 可能会很昂贵。

过去,Git 可以通过 hook与 Watchman 等工具集成,从而可以用更直接地跟踪文件系统状态的长时间运行的守护进程来替换 Git 昂贵的刷新过程。

但是设置这个钩子并安装第三方工具可能很麻烦。在 Git 2.37 中,此功能内置于 Windows 和 macOS 上的 Git 本身,无需安装外部工具和配置钩子。

通过启用core.fsmonitor配置设置即可为仓库启用此功能。

$ git config core.fsmonitor true 

完成配置后,初始git status命令将花费正常的时间。

详情查看发布公告。


相關推薦

2022-12-14

Git 2.39 已正式发布。 新版本主要变化包括: 为git shortlog命令添加更灵活的--group选项 该选项支持按作者或提交者以外的字段对 commit 进行分组,例如 $ git shortlog -ns --group=author --group=trailer:co-authored-by 优化稀疏索引

2023-02-02

系统调用和基本函数的标准 C 语言库,目前 2.37 版本已经发布,这个在 Linux 和其他平台上广泛使用的 libc 实现有许多错误修复以及一些新功能。 Glibc 2.37 的一些亮点包括: getent 工具现在支持--no-addrconfig选项。 动态

2022-06-21

Git 2.37 上周发布了最新 RC 版本。 2.37 没有添加“杀手锏”级别的新功能,但与之前的版本相比有许多增量工作,主要变化包括: 为 git --version 引入替代方案 git -v,以及 git --help 的替代方案 git -h 提供

2022-10-05

Git 2.38 已正式发布。此版本最值得关注的变化是引入微软创建的仓库管理工具 Scalar——用于处理巨型 Git 仓库。 引入巨型 Git 仓库管理工具 Scalar Scalar 是一个使用 C# 编写的 .NET Core 应用程序(后来使用 C 进行了重写),

2023-03-11

,可以读取 crates 的索引,以及用于在 crates.io 注册中心发布的的基础设施。 之前的 git 协议(现在仍然是默认协议)是克隆一个存储库,该存储库会索引注册表中所有可用的 crates ,但这已经开始达到扩展的最大限制,以至于

2023-06-03

Rust 团队日前发布了 Rust 的新版本 —— 1.70.0,新版本中值得关注的变化包括: Crates.io 默认启用稀疏索引 Cargo 的 "sparse" 协议现在默认启用,用于从 crates.io 读取索引。这个功能之前已经在 Rust 1.68.0 中稳定下来,但仍然需要配

2022-11-08

GNU Octave 7.3.0 发布,现已可供下载。这是一个错误修复版本,具体更新内容如下: 改进和修复 scanf:到达 end of stream 时不要设置 error(bug#62723) 修复在混合@class/classdef类中显示的重复名称(bug #62802) canonicalize_file_name:

2023-10-14

VMware Greenplum 7 现已正式发布。Greenplum 是一个统一分析和人工智能 (AI) 平台,旨在帮助企业充分利用其数据资源。VMware Greenplum 核心是以开源 PostgreSQL 项目为基础,其独特之处在于将商业智能(BI)和人工智能(AI)功能无缝集成

2023-03-14

 Git 项目发布了 Git 2.40 版本,其中包含超过 88 个贡献者的功能和错误修复,其中 30 个是新贡献者。 以下为该版本部分新功能介绍: 在 Git 2.40 中,除了 Vim 之外, git jump 现在还支持 Emacs,允许使用 git jump 将位置列表填

2022-09-21

性能计算机图形学设计的编程语言。 目前 Taichi v1.1.3 发布了,此版本带来大量改进,摘录如下: 模块 添加纹理接口到 C-API ( #5520 )  Bug修复 使用 MacOS 禁用 vkCmdWriteTimestamp ,以在 Vulkan 上启用测试 ( #

2023-02-08

Open Source Initiative (OSI) 联合 OpenLogic 发布了一份最新的 2023 年开源状态报告。基于来自全球八个地区、20 多个行业、各种规模组织的开源用户的匿名调查答复,详细介绍了开源软件的使用、采用和挑战。 报告指出,从

2022-12-10

配器协议 (DAP) 的实验性支持。目前 Helix  22.12 版本已发布,这是一个功能丰富的版本,带来如下内容: Git diff gutter 新的 git diff gutter 跟踪当前缓冲区中与 git 索引相比的变化。 与签入到 git 的文件相比,装订线中的标记表

2023-05-07

。此版本还标志着之前作为实验性发布的几个主要功能的正式发布 — 我们希望您和我们一样渴望将段复制、可搜索快照等功能投入生产!完整的改进记录请看 发行说明,您可以在 Playground 上探索 OpenSearch 的可视化工

2022-06-29

ECMAScript 2022 现已获得 ECMA International 的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。 本 Ecma 标准定义了 ECMAScript 2022 Language,是 ECMAScript 语