当前位置: 首页 > news >正文

微软将所有的Windows代码库迁移到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代码仓库的解决方案。

\\

查看英文原文: Microsoft Has Moved the Windows Code Repo to Git

相关文章:

  • magento megatron主题加入中文
  • 对象不支持“abigimage”属性或方法
  • Hyper-v创建检查点(VM的快照功能)
  • dede程序打开install安装时出现dir
  • 解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
  • 【EMC】基本概念
  • Netty断线重连
  • 不要小看了get 与set
  • redhat7.2升级openssl、openssh
  • [HAOI2016]食物链
  • 事物分析的维度
  • 调查微软恶意升级 Windows 10 请愿即将达成
  • DB-Engines 4 月份全球数据库排名,MySQL 跌幅最大
  • Cmd Markdown 发布第十四次更新 --- 使命的召唤
  • npm 宣布协作工具 Orgs 免费,可不限量管理公有包
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Apache Pulsar 2.1 重磅发布
  •  D - 粉碎叛乱F - 其他起义
  • java2019面试题北京
  • Javascript Math对象和Date对象常用方法详解
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Promise初体验
  • SQLServer之创建数据库快照
  • tweak 支持第三方库
  • Vue组件定义
  • 给Prometheus造假数据的方法
  • 检测对象或数组
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 思维导图—你不知道的JavaScript中卷
  • 微信公众号开发小记——5.python微信红包
  • RDS-Mysql 物理备份恢复到本地数据库上
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 交换综合实验一
  • 通过调用文摘列表API获取文摘
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (02)vite环境变量配置
  • (26)4.7 字符函数和字符串函数
  • (3)STL算法之搜索
  • (4)(4.6) Triducer
  • (6)设计一个TimeMap
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Python第六天)文件处理
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十一)c52学习之旅-动态数码管
  • (四)库存超卖案例实战——优化redis分布式锁
  • (正则)提取页面里的img标签
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包