微软已经将他们的 Windows 代码库从 Source Depot 迁移到 GVFS 上。根据微软公司副总裁 Brian Harry 的描述,微软在多年前就决定要对他们的工程系统进行改造。虽然有些工具在整个公司里被大范围使用,但也有些工具对于个别团队来说很陌生,这导致了团队合作的困难以及工具和流程之间的差别,给他们带来了负面影响。大规模的微软工程团队覆盖了很多领域——版本控制、构建、发布、测试、遥测、静态分析、安全,等等。一下子解决这么多问题是非常困难的,所以他们决定先解决工作计划、代码控制和构建问题。
首先,让整个公司使用 Visual Studio 团队提供的服务,该团队提供所有必要的工具。在代码控制方面,公司的大部分团队在使用 TFS,除了 Windows 和 Office 这两个大团队,他们仍然在使用 Source Depot,这个版本控制系统是微软在二十一世纪早期引入的。将这两个团队迁移到一个完全不一样的系统,需要付出高昂的代价,没有人愿意卷入到这个漩涡中。
经过了几番讨论之后——TFVC、Source Depot、Git 和 Mercurial——微软决定尝试一下 Git,看看它是否可能成为合适的解决方案。将小型或中型的代码仓库迁移到 Git 是没有问题的,但是在迁移大型代码仓库时遇到了严重的伸缩问题:
很少有公司能够有我们这么大规模的代码库。特别是 Windows 和 Office 的代码(当然还有其他的),它们占据了相当大的比例。数千名工程师,数百万个文件,数千台机器每天在做构建工作。说实话,这真的让人难以置信。说得更清楚一点,我这里所说的 Windows,包括了 PC、移动手机、服务器、HoloLens、Xbox 和物联网等系统。Git 是一种分布式版本控制系统(DVCS),它会将整个代码库和历史下载到本地。对于 Windows 代码库来说,这么做是很可笑的(如果这么做,我们也会被别人嘲笑)。TFVC 和 Source Depot 已经针对大型代码库和团队做过优化,而 Git 从来没有被用于解决这样的问题(或者用在比这要大一个数量级的情况),很多人断定这么做是不可行的。
从数字方面来看,Windows 代码库的大小有 300GB 左右,350 万个文件,4000 名工程师,每天在 440 个分支上有差不多 1700 次的构建。如果有人要克隆 Git 仓库,他必须把所有的东西都下载下来,整个过程非常缓慢。微软的解决方案是使用虚拟化技术,并引入了 Git 虚拟文件系统( GVFS )。GVFS 会让人感觉所有的东西都在本地,但实际上,系统会监视用户的操作,只是在必要的时候才会通过网络将需要的文件下载到本地。使用虚拟文件系统驱动器需要对 git.exe 做一些更改,但他们不想对 Git 做出太多改动:
我们当然不想为 Git 创建一个分支,这样会带来灾难性的后果。我们也不希望我们所做出的改动会让社区无法从中获益。所以,我们尽可能地在 Git 的“庇护”下使用虚拟文件系统驱动器。
在三个月的时间内,微软将整个 Windows 团队从 Source Depot 迁移到由 VS 团队搭建的 Git 上。 Harry 说,它是目前世界上最大的 Git 代码仓库,而且非常的成功。在一开始,他们遇到了一些性能问题,经过调整之后解决了这些问题。内部的问卷调查结果显示,超过 70% 的工程师表示对 Git“很满意”或者“比较满意”。
微软已经将GVFS 开源,并邀请其他对它感兴趣的公司来使用它,并加入到贡献行列,将它作为超大型Git 代码仓库的解决方案。
评论