Git属于分布式版本控制系统,默认情况下,每个Git仓库都具有整个历史记录的完整文件副本。即便是中等规模的开发团队也会产生数千个提交,每个月向仓库添加几百兆的数据。而随着仓库的占用空间增加,Git难以管理所有数据,导致其运行越来越不顺畅。如此一来,开发者的时间就会被浪费在执行命令后等待反馈的操作上,如使用git status获取被修改的文件,或者使用git fetch将代码拉取至本地。由于等待的时间过长,开发者大多会倾向于切换至完成另外的任务,待命令执行完成后再切换回来。而这种来回切换任务的工作方式常常会降低开发者的生产力。

对于处理巨型Git仓库的问题,微软显然是颇有经验。毕竟Windows操作系统的代码就是使用Git进行管理,为了克服上述的问题,微软开发了VFS for Git(以前称为GVFS),此项目使用虚拟文件系统绕过了许多仓库大小的限制,所以Windows开发者在如此庞大的项目前也能正常使用Git。

在开发Vit for Git的同时,微软通过使用自定义跟踪系统和收集用户反馈来确定性能瓶颈。在此期间,微软也为Git客户端贡献了一些代码,包括提交树(Commit-Graph)功能以及对git push和稀疏检出的改进。基于这些贡献以及其他许多对Git的近期改进,微软启动了一个项目——无需虚拟文件系统即可支持巨型Git仓库。这就是Scalar的诞生背景。

Scalar是一个使用C#编写的.NET Core应用程序,仅支持在Windows和macOS平台中运行。Scalar通过设置所建议的配置值和运行后台维护来最大程度优化Git命令的性能。无论开发者使用什么服务来托管代码仓库,Scalar都能有效地加速Git指令。微软提到,只要使用Scalar为体积最大的代码仓库进行注册,就能马上感受到Git执行速度大的幅提升。

对于Scalar的未来,微软希望将其贡献给Git。微软计划把Scalar中加速Git的方法直接合并到Git项目中,最终实现让开发者不需要Scalar,仅使用Git客户端就能获得这些性能改进。不过要达成这个目标,仍然有很长的路要走。微软提到,目前稀疏检出是Scalar用来解决仓库规模扩大的方法,尽管Git最近更新了稀疏检出功能,使得该功能更容易使用,但是要达到提供完整功能的阶段,还有一段距离。

Scalar目前使用稀疏检出而非虚拟文件系统,因此在执行Git命令时会存在瓶颈,特别是git checkout的速度不及VFS for Git,微软正在研究并行版本的git checkout,以提高执行性能。微软提到,为了真正地扩展Git服务以满足成千上万的工程师的需求,并构建与中央服务器交互的机器,Git需要提供类似于GVFS缓存服务器的概念。他们也表示计划很快在邮件列表中提出这个想法。

另外,目前Git客户端仓库之所以能顺畅地执行,是依赖定期执行的前台垃圾回收器,但微软提到,对于巨型仓库来说,这是不可行的方法。因此微软计划在Git客户端中加入某种形式的后台维护功能,类似git maintenance start命令,并像scalar register一样容易使用。

推荐内容