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一样容易使用。

详细的使用说明请查看:

https://devblogs.microsoft.com/devops/introducing-scalar

推荐阅读

手机厂商们请不要再自行修改Linux内核代码了

百度开源业内首个口罩人脸检测及分类模型

FSF给微软寄硬盘,会收到Windows 7源码吗?

Linus亲手优化内核管道代码,make性能大幅提升

十年来影响最大的C++ 20准备发布,C++ 23提上议程

从git仓库获取源码_微软开源Scalar,提升操作巨型Git仓库的速度相关推荐

  1. php从内存中获取源码_【PHP7源码分析】PHP内存管理

    作者: 顺风车运营研发团队 李乐 第一章 从操作系统内存管理说起 程序是代码和数据的集合,进程是运行着的程序:操作系统需要为进程分配内存:进程运行完毕需要释放内存:内存管理就是内存的分配和释放: 1. ...

  2. git 只允许 源码_如何阻止离职员工盗窃公司源码?你一定要知道的三种方案

    源码是软件服务公司最重要的资产,像是银行等要求严格地方,使用的是全内网.封USB的方式进行软件研发,这样的方式虽然安全了,但是会带来研发的各种不便(很多地方需要查阅资料无法闭门造车),那么有没有好的方 ...

  3. 微软开源Scalar,提升操作巨型Git仓库的速度

    Git 属于分布式版本控制系统,默认情况下,每个 Git 仓库都具有整个历史记录的完整文件副本.即便是中等规模的开发团队也会产生数千个提交,每个月向仓库添加几百兆的数据. 而随着仓库的占用空间增加,G ...

  4. 微软开源 Scalar,提升操作巨型 Git 仓库的速度

    Git 属于分布式版本控制系统,默认情况下,每个 Git 仓库都具有整个历史记录的完整文件副本.即便是中等规模的开发团队也会产生数千个提交,每个月向仓库添加几百兆的数据.而随着仓库的占用空间增加,Gi ...

  5. springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...

    一.引言 目前,利用swagger框架为restful接口编写API文档非常流行,在spring web项目中,利用springfox+swagger更是可以通过注解的方式直接进行API文档的生成,这 ...

  6. 酷炫猜歌喝酒小程序源码_可开源带流量主

    好友分享的一套小程序,很有意思啊,UI也漂亮,白色应用类型,不违规, 可以自己试着做一个,朋友自己现在运营的,收入还不错. 开源的程序,可以任意二开,程序很小,也不挑服务器.东西如下图,感兴趣的自己拿 ...

  7. JAVA计算机毕业设计仓库管理系统源码+数据库+系统+lw文档

    JAVA计算机毕业设计仓库管理系统源码+数据库+系统+lw文档 JAVA计算机毕业设计仓库管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件: ...

  8. 计算机毕业设计Java-ssm仓库管理系统源码+系统+数据库+lw文档

    计算机毕业设计Java-ssm仓库管理系统源码+系统+数据库+lw文档 计算机毕业设计Java-ssm仓库管理系统源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  9. vue代码可以反编译吗_避免小程序被反编译获取源码(转载)

    原地址:https://www.cnblogs.com/taltao/p/10082084.html 众所周知,微信小程序的代码安全性很弱,很容易被别人反编译获取源码.我自己的小程序也被别人反编译拿到 ...

最新文章

  1. 让AI训练AI,阿里和浙大的“AI训练师助手”是这样炼成的
  2. 如何使用 Python 或 Bash动态生成 Jekyll 配置文件
  3. 中国科学:拟南芥二半萜类化合物调控根系微生物组
  4. maven的内部属性
  5. springboot中三种xxxx.setAttribute()并与python中flask作对应比较+容器的通俗理解
  6. Spring Cloud Sidecar –节点初始化
  7. mysql connetor_python mysqlconnetor
  8. git 查看远程仓库地址
  9. 学习资料参考:从深度学习到自然语言处理
  10. 开启自己的博客园,在学习成长的路上一路向前
  11. IT程序员必知!TCP/IP为什么会有这么多的致命漏洞?
  12. mongodb与mysql的区别与具体应用场景
  13. Ansible详解(十二)——Ansible Roles详解
  14. 论文用impact、effect、influence 什么区别
  15. 容器技术Docker K8s 42 Serverless Kubernetes(ASK)详解-ASK应用管理
  16. 原来大家最拼命的时候是这样子的
  17. linux du命令使用
  18. 北京邮电大学计算机学院考研夏令营,北京邮电大学计算机学院(专业学位)计算机技术保研夏令营...
  19. 【MATLAB】使用“蒙特卡罗(Monter Carlo)”算法计算不规则图形的面积
  20. CSS尺寸与文本讲解。HTML、CSS笔记(四)。

热门文章

  1. c语言传址函数,关于c语言函数传址的规定
  2. 【数据结构】链表的python实现
  3. php数据的导出到excel,php 数据的导出到excel表格-怎么将php数据导出excel
  4. Javascript第四章函数function也是数据类型第六课
  5. Vue学习笔记之10-组件化开发
  6. linux压缩比,Linux下各压缩方式测试(压缩率和使用时间)
  7. 怎么把git代码导入到本地仓库_git在本地仓库添加了一个tag,如何把这个tag同步到远程仓库?...
  8. anaconda使用pythonnotebook_anaconda3 notebook for python数据分析-环境搭建
  9. linux安装jenkins配置环境变量,Ubuntu 16.04 安装Jenkins持续集成
  10. Jconsole/jvisualvm远程监控weblogic中间件配置