去年,微软宣布将使用 Git 版本控制系统进行 Windows 开发。微软就要修改Git来处理Windows开发的需求,但它表示想要将这些修改整合到标准的Git客户端中。
这个计划似乎进展顺利。GitHub正在进行修改,Microsoft 和 GitHub 将合作为MacOS和Linux带来合适的客户端。
由于Git的分支特性和在开发人员中的流行程度,微软希望将代码转移到Git上。但是转型面临三个问题:
- Git并不是为广大开发人员设计的 – 超过2万人在开发代码库;
- 另外,Git并不是针对如此庞大的代码库设计的 – 无论是每个文件的文件数量和版本历史记录,还是纯粹的大小,都超过了300GB;
- 使用标准的Git时,源代码库的速度慢得令人无法接受 – 常见的操作(例如检查哪些文件已被修改)都需要很多分钟。
该公司的解决方案是开发Git虚拟文件系统(GVFS)。GVFS 全称是 Git Virtual File System. GVFS 对 git 仓库存储文件系统进行虚拟化,对应 git 而言,这就是一个混合的文件系统,但 GVFS 只下载所需的对象。GVFS 同时管理 git 一些非实际的 checkout 操作,用来提升类似 status、checkout 等操作的速度。目前该项目还在开发过程中。
使用GVFS,包含元数据以及仅显式检索的源代码文件的Git存储库本地副本被虚拟化。通过取消复制每个文件(检查每个文件并对其进行修改),存储库的磁盘占用空间和使用速度大大提高。微软修改了Git来处理这个虚拟文件系统,这样客户端就不必尝试访问本地不可用的的文件。并且添加了一个新的传输协议来选择性地从远程存储库中检索单个文件。
GitHub参与是因为公司希望满足企业客户的需求。开源,免费的GitHub托管也不是非要微软做扩展工作不可 – 显然,如果有人要使用标准的Git,那么Git必须足够好的来满足他们的开发过程。但企业在有偿方面,情况会有所不同。某些行业有大量的存储库则会给Git带来问题;例如,游戏仓库通常在体积上大并不是因为它们拥有数百万个文件和数十年的历史,而是因为它们拥有大量的图形和其他资源。微软对Git所做的扩展改进对于这种大型的存储库也是有用的。因此,在GitHub中拥有相同的改进系列将使Git能够更好地为这些社区服务。
顾名思义,GVFS需要一个文件系统驱动程序才能工作。 Windows部门与工程团队合作,为Windows添加功能以提高效率。最终目的是将此功能转换为受支持的可扩展API,并在某些时候移动新的OneDrive placeholders 以使用相同的API。
微软和GitHub也正在努力为其他平台带来类似的功能,首先是macOS,后来是Linux。在这两个系统上执行此操作的明显是使用FUSE方法,这是一种以用户模式而不是内核模式运行的文件系统的基础结构(因为用户模式开发比内核模式更简单,更安全)。但是,这些公司发现FUSE的速度还不够快,Dropbox学习到了一种类似的于的Project Infinite。目前,名为Kauth(或KAuth)的macOS可扩展性机制将是最好的选择。
Git 分布式版本控制系统在开发者中间非常受欢迎,连微软也决定将 Windows 的开发迁移到 Git,但 Git 在设计时并没有考虑到 Windows 这样庞大的项目,有着数以万计的开发者,源代码文件多达数百 GB。如果使用标准的 Git,其速度之慢是难以接受的。微软因此开发了 Git 虚拟文件系统 GVFS,本地的 Git 库 副本是虚拟化的,只包含元数据和必要的源代码文件。通过避免复制所有文件,GVFS 降低占用的空间和改善了速度。GVFS 此前只支持 Windows,现在微软宣布和 GitHub 合作将 GVFS 带到 macOS 和 Linux 上。