【IT168 编译】去年,有一个非常令人惊讶的事情,就是微软宣布将使用Git版本控制系统进行Windows开发。为了实现这一目标,微软不得不修改Git来处理Windows开发的需求,并且将这些需求上传上去并集成到标准的Git客户端中。
目前,这个计划貌似进展得比较顺利。16日,微软公司宣布GitHub正在积极进行修改,两家公司将携手为MacOS和Linux带来合适的客户端。
由于Git的特殊性,微软更希望转移到Git上,但是转型却面临着三个问题,首先,Git并不是为广大开发人员设计的,超过2万人在开发代码库。其次,Git并不是针对如此广大的代码库设计的,无论是每个文件的文件数量和版本历史数量,还是纯粹的大小,都超过了300GB。第三,使用标准的Git时,源代码库的速度慢得简直令人无法接受,一些常见操作(如检查哪些文件已被修改)可能就需要几分钟。
该公司的解决方案是开发Git虚拟文件系统(GVFS)。使用GVFS,Git存储库的本地副本被虚拟化,使其包含元数据以及仅显式检索的源代码文件。通过消除复制每个文件的需要,存储库的磁盘占用空间和使用速度大大提高。微软修改了Git来处理虚拟文件系统。客户端被改变了,这样它就不会不必要地尝试访问本地不可用的文件,并且添加了一个新的传输协议来选择性地从远程存储库中检索单个文件。
通过内部测试,这个做法是成功的,今年5月Windows开发大幅迁移到了Git。但是,Git社区是否有了变化呢?
微软表示,到目前为止,大约一半的修改已经被上游接受,上游的Git开发者普遍赞同公司采取的改进软件扩展的方法。 Redmond还表示,愿意改变其方法来满足上游Git的需求。其中最大的复杂性在于,Git对兼容性采取了非常保守的方法,要求存储库在各个版本之间保持兼容。
GitHub对此表现出兴趣和参与感是由企业客户的需求所驱动的。开源,免费的GitHub托管并不需要微软所做的扩展工作,所以对于Git用户来说,现在的Git必须足够好,足以满足开发过程。在付费企业方面,情况会有些不同。某些行业有大量的存储库,这会给Git带来问题,例如,游戏存储库通常很大,这不是因为它们拥有数百万个文件和数十年的历史,而是因为它们有大量的图形和其他资源。而微软对Git所做的扩展改进对于这种大型的存储库也是有用的。因此,在GitHub上所做的改进有助于更好地服务于企业。
同样,微软本身也有类似的企业需求,例如西门子希望从Team Foundation Server版本控制转移到使用Git。但是,只有在规模扩大之后,Git才能更好地发挥效果,目前的规模使用TFS版本控制效果更好。
顾名思义,GVFS需要一个文件系统驱动程序才能工作。Windows部门与工程团队合作,为Windows添加功能以提高效率,并最终将此功能转换为受支持的可扩展API,在某些时候移动新的OneDrive占位符等系统以使用相同的API。
微软和GitHub也正在努力为其他平台带来类似的功能,首先会是macOS,接下来是Linux。在这两个系统上执行此操作的方法是使用FUSE,这是一种构建以用户模式而不是内核模式运行的文件系统的基础结构(因为用户模式开发比内核模式更简单,更安全)。但是结果发现FUSE的速度还不够快,通过Dropbox开发类似功能Project Infinite中学到一些东西,目前,采用Kauth(或KAuth)的macOS可扩展性机制将是最好的选择。