阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

微软工程师介绍了 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:239842

评论

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

StarRocks x 腾讯视频:指标中台驱动湖仓一体建设实践

StarRocks

数据库 大数据 数据湖 湖仓一体 指标平台

数字藏品NFT链游开发:快速上线定制开发的最佳选择

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

拼多多API:轻松掌握商品详情的艺术

Noah

TASKCTL技术前沿: Docker容器数据卷的高级配置 —— 统一任务调度平台的策略优化

敏捷调度TASKCTL

TASKCTL Docker 镜像

软件测试学习笔记丨Python 内置库 多线程threding

测试人

软件测试

豆瓣评分9.6!用81个项目带你从Python 3零基础到Python自动化

我再BUG界嘎嘎乱杀

Python 编程 入门 开发语言 零基础

人工智能 | 大模型之提示词工程:零样本提示

测吧(北京)科技有限公司

测试

“翼”鸣惊人 天翼云两篇论文被ACM ICPP 2024收录

极客天地

多链代币开发:打造跨链互操作性的新纪元

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

TON链代币开发:探索区块链的新前沿

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

上周面了百度,问的很细~

王磊

Java 面试

一文了解Spark引擎的优势及应用场景

不在线第一只蜗牛

大数据 spark 分布式

服务网格自动故障检测及流量切换方案

天翼云开发者社区

云计算 微服务 云原生 容器技术 服务网格

全面升级,票据识别新纪元:合合信息TextIn多票识别2.0

合合技术团队

人工智能 OCR 发票识别

Dapp系统开发:从需求定制到源码交付的一站式解决方案

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

淘宝/天猫商品详情API接口在电商智能决策支持系统中的作用与实现

技术冰糖葫芦

api 网关 API Explorer API 文档 pinduoduo API

Go Modules:Go语言依赖管理的新篇章

左诗右码

元宇宙链游APP开发专属平台:开启虚拟世界新纪元

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

NumPy的深浅拷贝的区别与选择

我再BUG界嘎嘎乱杀

Python Numpy 深浅拷贝

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