feedback
Skip to content
/Git 缩放

Git 缩放

By Saeed Noursalehi

简介

作者 Saeed Noursalehi

我们最近宣布,已将整个 Windows 基准代码迁移到了 Visual Studio Team Services 上托管的一个 Git 存储库。 在此次迁移中,我们遇到了一些非常有趣的缩放挑战需要应对,包括 Git 协议和对象存储的固有问题、Git 命令行性能,以及使用一个存储库的相应规模团队需要应对的工作流挑战。 本系列文章将深入介绍其中每个缩放挑战,以及我们是如何应对这些挑战的,以便这样规模的团队能够在 Git 中成功开展工作。

缩放旅程非常漫长,这些文章将介绍整个旅程。 说到“Git 缩放”,请务必注意,有许多独立因素(如人数、文件数等)会影响 Git 缩放,并且存储库和团队规模范围广泛。 我们将在这些文章中引用以下类别的存储库,以重点展示这一缩放领域的一些具体示例。

这些全都是我们在 Microsoft 内部使用的真实存储库,包括小型存储库和我们拥有的最大型存储库。 我们将在介绍各种缩放挑战和解决方案的同时,重新引用这些存储库,让问题更具体化。 在本系列文章结束时,我们将再回到这些存储库,介绍各个团队是如何编写各种缩放解决方案,从而为团队创建最佳体验的。

这些文章的目标读者不仅非常了解 Git,并且还在考虑如何将 Git 缩放为满足更大团队的需求。我们不会介绍有关 Git 工作方式的基础知识,但必要时,我们将介绍 Git 内部运作机制,以便于分析当前缩放问题。

小型存储库

虽然 GVFS 是旨在成为全球最大型存储库的产品,但在缩放需求方面,GVFS 本身的基准代码相当普通。

GVFS 统计信息:

  • 存储库大小:10MB 包文件,2MB 工作目录,400 个文件
  • 团队:10 人
  • 分支:300 个
  • 生成/测试:生成需要 30 秒完成,单元测试需要 10 秒完成,功能测试需要 30 分钟完成

与 Microsoft 及其他地方的数千个存储库相比,这是一个非常典型的存储库,Git 几乎以此存储库大小见长。 从这一点来讲,此类存储库没有任何缩放挑战。 大多数的缩放挑战都可以归入以下范畴:要确保高水平的代码质量、关于拉取请求和发布过程要有明确的工作流等。

中型存储库

Visual Studio Team Services 和 Team Foundation Server 都是在同一个基准代码的基础之上构建而成。 在 Microsoft,我们将此类存储库视为中型,但与世界上的其他大多数存储库相比,这绝对属于较大存储库。 目前,Microsoft 大约有 10 个此大小左右的存储库。

VSTS 统计信息:

  • 存储库大小:10GB 包文件,3GB 工作目录,10 万个文件
  • 团队:400 人
  • 分支:2 万个
  • 生成/测试:生成需要 10 分钟完成,单元测试需要 5 分钟完成,基本的功能测试需要 5 分钟完成,完整的功能测试需要 5 小时完成

对于此大小的存储库,我们目前能够很好地开展工作,但为此需要解决许多缩放问题。 最痛苦的部分是,400 多人可以将更改推送到主分支,想要在这场推送比赛中获胜,非常困难,比率也十分低。

超大型存储库

Windows 基准代码本身属于这一类。 此代码涉及 OneCore、桌面、服务器、Xbox、IOT、移动和 HoloLens 的方方面面。 鉴于此基准代码已存在数十年,并且仍支持自 Windows 初期以来的旧功能,所以可以想象此基准代码的规模相当庞大。

Windows 统计信息:

  • 存储库大小:100GB 包文件,300GB 工作目录,350 万个文件
  • 团队:4000 人
  • 分支:预计在 15 万到 25 万个之间
  • 生成/测试:增量生成需要几秒钟到几分钟完成,完整生成需要 12 小时完成,增量测试需要几分钟完成,完整验证需要几小时完成

对于此类大小的存储库,必须应用我们所能想到的全部技巧来缩放 Git,以确保开发者能够最大限度地提高工作效率。 我们最近宣布发布 Git 虚拟文件系统,这个令人迷惑不解的问题也涉及它。 在本系列文章中,我们将介绍整个令人迷惑不解的问题及其全部涉及方面。

在本系列的下一篇文章中,我们将介绍 Git 存储库在扩大时遇到的具体问题。

Git 缩放文章

  • GVFS 内部运作机制
  • Windows 存储库案例研究
Saeed Noursalehi

Saeed Noursalehi

Saeed Noursalehi is a Principal Program Manager on the Visual Studio Team Services team at Microsoft, and works on making Git scale for the largest teams in Microsoft