@xuemingdeng
2017-05-25T22:05:05.000000Z
字数 1531
阅读 603
运维
摘要:
微软将所有的Windows代码从Source Depot迁移到基于GVFS的Git上。
正文:
微软已经将他们的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代码仓库的解决方案。