Git 源代码管理系统 2.37 版本周发布,新功能包括用于提高性能的内置文件系统监视器,现在在 Windows 和 Mac 上稳定,用于更好地管理已删除对象的杂乱包,以及完全集成支持稀疏克隆,避免了在只需要一部分时下载整个存储库的需要。
根据最近的一项调查,近 94% 的开发人员使用 Git,尽管我们的直觉是只有少数人探索更高级的功能。git 文档列出了大约 150 个命令
https://git-scm.com/docs/git
分为“porcelain”高级命令和“plumbing”低级命令,其中许多有子选项。尽管它已经成熟,但在性能、安全性和开发人员工作流程等领域还有很多工作要做。
文件系统监视器的目的是提高 git status 等命令的性能,这可能需要扫描整个工作目录。它在 Windows 和 macOS 上的 Git 中可用,并通过配置设置启用。复杂之处在于,Git 还支持使用外部文件系统监视器,通常是 Watchman,创新之处在于,以前实验性的内置文件系统监视器现在稳定,导致一些令人困惑的消息。
当使用多个版本的 git 时,像这样的新功能也会出现问题,这在 IDE 安装自己的版本时很常见。该文档尚未将 Linux 作为内置文件系统监视器的支持平台包括在内。
https://git-scm.com/docs/git-config#Documentation/git-config.txt-corefsmonitor
部分和稀疏克隆是另一个关键特性,在使用大型存储库时非常有意义。去年看到了稀疏索引的引入:
https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/
这可以在性能上产生巨大的差异,但需要注意的是并非所有 Git 命令都理解稀疏索引。那些未集成的会触发兼容性检查,在第一次读取索引时将稀疏索引转换为完整索引。
2.37 版扩展了对核心 Git 项目中所有命令的支持,现在包括 git show、git sparse-checkout 和 git stash,其中最后一个提供了“在某些情况下将近 80% 的加速”。
另一个名为 cruft packs 的新功能允许将无法访问的对象存储在单个文件中,并附有文件时间表,Git 团队称这避免了.git/objects
的碎片可能导致存储库性能下降甚至降低整个系统的性能。
https://git-scm.com/docs/cruft-packs
在诸如 <protocol>://<user>:<password>@<domain>/<path>
这样的 URL 中包含 git 凭据是一种安全风险,尤其是当该 URL 可能传递给其他 git 程序时。可以将新的 transfer.credentialsInUrl 设置设置为“warn”或“die”,以防止无意中使用此机制。
2.37 的发行说明在这里:
https://github.com/git/git/blob/v2.37.0/Documentation/RelNotes/2.37.0.txt,
高级软件工程师 Taylor Blau 的 GitHub 博客描述了这些变化:
https://github.blog/2022-06-27-highlights-from-git-2-37/