写点什么

微软工程师介绍了 Git 中一个会导致代码库膨胀的缺陷,修复方案即将推出

  • 2024-11-12
    北京
  • 本文字数:897 字

    阅读完需:约 3 分钟

大小:406.20K时长:02:18
微软工程师介绍了Git中一个会导致代码库膨胀的缺陷,修复方案即将推出

文最初发布于 DEV CLASS。



Git 计算同一文件不同版本差异的方法存在缺陷,可能会使代码库膨胀数倍,导致性能问题并消耗过多的存储空间。


微软高级工程师 Jonathan Creamer 发文 介绍了其团队使用的一个非常大的 JavaScript Git 存储库,一个单体库(一个存储库,存储多个相关的项目)。该库的每月活跃用户数超过 1000 人,代码行数约为 2000 万行。根据 Creamer 的报告,克隆这个存储库消耗了超乎想象的 178GB 磁盘空间。


该团队咨询了 Git 贡献者 Derrick Stolee(曾在 GitHub 工作,现为微软首席软件工程师)。他发现,在比较两个文件名是常用名的文件(本例中为 CHANGELOG.md)时,Git 实际上是在比较来自不同软件包的文件,因此每次提交都会发现很大的差异。


Stolee 向 Git 提交了一个 Pull 请求,添加了他所谓的 “path walk API”,使 Git 能够按路径对对象进行分组,“完全避免了文件名的哈希碰撞”。Creamer 使用新增的-path-walk参数,将git repack命令应用于这个大型存储库,结果库的大小减小到了 5GB。


在 Linux 内核邮件列表上,Stolee 也 发了 关于这个问题的帖子,称 “其主要发现是当前的文件名哈希算法只考虑了路径名的最后 16 个字符,在这样一个范围内自然会发生一些碰撞”。


在另一篇文章中,Stolee 指出:“在我查看的存储库中,按磁盘大小排序的前 100 个文件路径有一个明显的模式:其中 99 个是 CHANGELOG.json 和 CHANGELOG.md 文件...... 本应是一组微不足道的增量,却膨胀到了 20-60MB” 。


Stolee 还举了其他一些存储库的例子,用于说明新选项大大减少了它们所需的存储空间,其中一个存储库占用的存储空间从 130049MB 减少到了 4432MB。


Git 存储库过大的后果不仅是占用过大的磁盘空间,而且还会导致 Git 运行缓慢,有时甚至会完全失败,这取决于延迟和可用带宽。


虽然新选项确实可以显著节省空间,但这些例子都是大型存储库,有很多潜在的文件名冲突。典型的 Git 存储库无法以同样的方式受益。尽管如此,开发者们还是很希望在 Git 的发行版本中看到这些新功能。


原文链接:

https://devclass.com/2024/10/29/microsoft-engineer-describes-a-flaw-in-git-that-can-hugely-bloat-repositories-fix-is-on-the-way/

2024-11-12 18:239761

评论

发布
暂无评论
发现更多内容

【Flutter 专题】50 图解动画小插曲之 Lottie 动画

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

5 个网站将您的前端技能从 1 倍提升到 100 倍

云原生

学习 大前端 全栈

redis主从实践(一)

风翱

redis 9月日更

手撸二叉树之二叉搜索树的最小绝对差

HelloWorld杰少

数据结构与算法 9月日更

【优化技术专题】「线程间的高性能消息框架」深入浅出Disruptor的使用和原理

码界西柚

Disruptor LinkedBlockingQueue ArrayBlockingQueue 9月日更

号外!号外!极客时间出插件了😎

IT蜗壳-Tango

极客时间 9月日更 浏览器插件

Python代码阅读(第27篇):将变量名转换成驼峰形式

Felix

Python 编程 Code Programing 阅读代码

深入理解rtmp(三)之手把手实现握手协议

轻口味

音视频 RTMP 9月日更

NDK-AAudio

Changing Lin

9月日更

人才缺口超70万,15所高校新设区块链专业

CECBC

这可能是最细的HashMap详解了!

程序员阿杜

Java JVM ArrayList

使用Git分布式控制系统,怒斩腾讯和阿里的Offer

Java 程序员 后端

北鲲云SaaS平台让生物医学关键环节不再靠“猜”

北鲲云

狄刚谈区块链:技术上去中心化并不等于管理去中心化

CECBC

Vite + Vue3 + OpenLayers

德育处主任

大前端 地图 vite Vue3 openlayers

详解css中清除浮动的四种方式,float浮动怎么用更为合理

你好bk

最佳实践 方法论 大前端 html/css 语言 & 开发

Python——函数正确调用

在即

9月日更

【VueRouter 源码学习】第九篇 - router-view 组件的实现

Brave

源码 vue-router 9月日更

灯塔之上:vivo X70背后的影像进化史

脑极体

【墨天轮专访第四期】华为云GaussDB:发挥生态优势,培养应用型DBA

华为云数据库小助手

GaussDB 交流 华为云数据库 人物访谈

阿里巴巴开源数据库--OceanBase从使用聊到架构剖析

hanaper

通过编程训练题来讲讲链表操作

Regan Yue

算法 链表 9月日更

Vue进阶(幺零七):arr.forEach() 跳出循环

No Silver Bullet

Vue 9月日更

RocksDB原理及应用

hanaper

redis--zset解析

en

redis Zset 引航计划

将JSON中对于集合的数据,如何解析成对象集合

卢卡多多

集合 Stream<T> 9月日更

没有Linux服务器,该如何学习Linux呢?

Simon郎

大数据 Linux java;

什么?语音合成开源代码不会跑,Follow me!

华为云开发者联盟

tensorflow 语音合成 Tacotron2 DeepMind 深度神经网络模型

14 种编程语言书写关机脚本,真香

梦想橡皮擦

9月日更

Who is Mavenir?

俞凡

Mavenir

这可能是最细的ArrayList详解了!

程序员阿杜

Java ArrayList

微软工程师介绍了Git中一个会导致代码库膨胀的缺陷,修复方案即将推出_安全_Tim Anderson_InfoQ精选文章