Rush Stack商店博客活动
跳至主要内容

使用 Sparo 加速 Git

随着越来越多的项目加入,单体仓库通常会快速增长。尽管 Rush 提供了各种机制来加速安装时间构建时间,但对于非常大的仓库来说,即使是像git clonegit checkout这样的基本操作也会变得令人沮丧地缓慢。

Git 优化

Git 提供了一些内置功能,这些功能可能足以加速中等规模的仓库

  • 浅克隆 允许只克隆少数提交,但这通常只适合一次性克隆,比如 CI 作业。

  • 部分克隆 允许克隆不包含文件内容(“无 Blob”克隆)甚至提交详细信息(无树克隆),这极大地加快了你的git clone时间,并允许在git checkout期间获取这些详细信息。

  • 大型文件存储 (LFS) 可以将大型二进制文件移动到单独的服务器,只有在需要时才在结帐时下载它们。但是,LFS 的使用很棘手,因为此功能依赖于 Git 外部的.gitattributes过滤:你的.gitattributes规则可以根据文件扩展名选择什么是“大型”,但没有简单的方法可以根据实际文件大小或更新频率进行选择。如果你不小心选择了太多文件,性能可能会比没有 LFS 情况更差。此外,对.gitattributes的更改不能在不重写整个 Git 历史记录的情况下追溯应用——这对于一个活跃的仓库来说是一个非常具有破坏性的操作。

幸运的是,Git 提供了更多高级功能,比如 **稀疏结帐**、**单分支克隆**、**文件系统监视器**、**后台维护** 以及各种用于调整行为的可选设置。这些功能可以直接通过 Git 命令行访问,但配置可能很复杂。普通用户通常难以采用这些功能。

Sparo 如何提供帮助

为了更轻松地应用高级 Git 优化,请尝试使用Sparo工具。它直接与 Rush 集成,并自动优化 Git。基本策略是 * **只获取你需要的** *,从三个方面考虑:(1)跳过无关分支,(2)跳过无关历史记录(部分克隆),(3)跳过无关项目文件夹的结帐(稀疏结帐)。

Sparo 使用Sparo 配置文件简化了稀疏结帐,这些配置文件可以指定智能选择,例如:“只结帐我的团队使用的两个应用程序,以及 Rush 工作区中的所有依赖项。”这样,工程师就不需要花时间确定要结帐的具体文件夹路径。Sparo 结帐始终包含一组基本的“框架文件夹”;这确保每个项目的 **package.json** 文件始终可用。Sparo 还可以选择收集匿名 Git 定时指标,帮助你的构建团队分析随时间的性能。

有关更多背景信息,请访问Sparo 网站

使用 Sparo

Git 和 Sparo 命令行可以互换使用。唯一的要求是你的工作目录必须最初使用sparo clone而不是git clone进行克隆。

以下是用azure-sdk-for-js(来自 GitHub 的一个大型公共 RushJS 单体仓库)进行快速演练

步骤 1:克隆仓库

# Install the Sparo command-line
npm install -g sparo

# Clone your Rush repository -- only the minimal "skeleton" gets cloned
sparo clone https://github.com/Azure/azure-sdk-for-js.git

步骤 2:创建配置文件

cd azure-sdk-for-js

# Create a sparse checkout profile, saved in common/sparo-profiles/my-team.json
sparo init-profile --profile my-team

编辑创建的 **my-team.json** 文件以添加项目选择器。例如

common/sparo-profiles/my-team.json

{
"selections": [
{
// This demo profile will check out the "@azure/arm-commerce" project
// and all of its dependencies:
"selector": "--to",
"argument": "@azure/arm-commerce"
}
]
}

步骤 3:结帐你的配置文件

在将更改保存到 **my-team.json** 之后,现在是时候应用它了

sparo checkout --profile my-team

试一试!例如

rush install

# The build should succeed because Sparo ensured that dependency projects
# were included in the sparse checkout:
rush build --to @azure/arm-commerce

对于日常工作,请考虑选择镜像子命令,例如sparo revert而不是git revert。Sparo 包装器提供(1)更好的默认值,(2)对更好性能的建议,以及(3)可选的匿名性能指标。

示例

sparo pull

sparo commit -m "Example command"

另请参阅