我们试过一种“虚拟化”Git的方案。通常当你用Git克隆分支时,它会把所有东西都下载下来。但如果它不下载所有东西,又会怎样?如果我们可以把底层的存储虚拟化,让它只下载需要的东西,又会怎样?这样的话克隆一个巨大的300GB的代码库就会非常快了。当我执行Git命令,或者在我的文件系统里读写文件时,系统会无缝地从云端获取内容(并且将它保存在本地,这样以后就是本地访问数据了)。这种方法的缺点在于没有离线支持。如果你需要这一点,你就得把所有东西“touch”一遍,假装在本地有它们,除此之外没有任何其它缺点了——你仍然会有100%一致的Git体验。而且对于我们的巨型代码库来说,这也是行得通的。
Saeed Noursalehi补充到:
有了GVFS,就意味着他们现在可以有了更好管理的Git使用体验:每次克隆只需要花几分钟,而不用12多个小时;检出代码只需要大约30秒,而不是2-3小时;status命令也只需要4-5秒钟,而不是10分钟。而且我们还在不断努力,让它些数字变得更好(当然,代价是第一次构建会花的时间更多些,因为它要把它构建的所有文件都下载下来,但以后再构建就不会比正常构建更慢了)。
微软对于Git的投入
要让这种方法可以正常工作,就要改进Git访问文件的方式。大家平时不一定会注意到,旧版的Git在访问本地存储的文件时,它通常会扫描比它真正需要的更多的文件。如果你去年已经注意到微软曾向Git OSS项目提交过改进性能的代码,这就是原因所在了。
Jeremyepling写道:
我们微软Git团队为git/git和git-for-windows做了许多贡献,来提高Git在Linux、Mac和Windows等上面的性能。在Git 2.10中,我们做了许多工作来使交互式Rebase操作更快。根据包含在Git源代码中的一种基准测试结果看来,交互式Rebase的最终表现是在Windows速度提升了5倍,在MacOSX上提升了4倍,在Linux也还有3倍的提升。
对Git的一些改进列举如下:
Git虚拟文件系统
Git虚拟文件系统GVFS的原型是在客户端用一个文件系统驱动,以及一个支持GVFS的Git版本实现的。这需要“Windows 10周年”版,或更新的版本。只要Git库支持了GVFS,那平时常用的Git命令就仍可以照常使用。GVFS子系统基于文件系统工作,它会在背后从服务器下载任何你需要的文件。
因为GVFS客户端库是开源的,这也是大家研究我们是如何在Windows上把虚拟文件系统实现为驱动的好机会。
在服务器端,你需要一些实现GVFS协议的东西。现在,这指的是Visual Studio团队服务,这协议是开源的,所以别的服务提供商也可以提供相同的能力。GVFS协议本身也是很简单的,包含四个类REST的接口。
Git 教程系列文章:
Ubuntu Git安装与使用