写点什么

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

评论

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

DApp开发定制:合约设计与源码搭建支持快速上线

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

从热数据到冷数据:TDengine 多级存储如何助力智能数据管理

TDengine

数据库 tdengine 时序数据库

ABB宣布收购Aurora Motors

财见

鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview

少湖说

flutter 鸿蒙 HarmonyOS

鸿蒙Flutter实战:04-如何使用DevTools调试Webview

少湖说

flutter 鸿蒙 HarmonyOS

鸿蒙Flutter实战:07-混合开发

少湖说

flutter 鸿蒙 HarmonyOS

鸿蒙Flutter实战:10-常见问题集合

少湖说

flutter 鸿蒙 HarmonyOS

鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0

少湖说

flutter 鸿蒙 HarmonyOS

如何确保度量过程中收集到的数据是有实际意义的?

思码逸研发效能

研发效能 数据研发 研发效能度量 研发效能管理

团子东子开奖了,这泼天的富贵!

王磊

鸿蒙Flutter实战:02-Windows环境搭建踩坑指南

少湖说

flutter 鸿蒙 HarmonyOS

如何理解ETLCloud在iPaas中的关键角色

RestCloud

数据可视化 ETL 数据集成 集成平台 ipaas

鸿蒙Flutter实战:06-使用ArkTs开发Flutter鸿蒙插件

少湖说

flutter 鸿蒙 HarmonyOS

1106AI快讯 | xAI API开放测试 | 腾讯混元模型发布 | ComfyCanvas简化绘画流程 | HelloMeme表情克隆技术 | Nvidia市值超苹果 | 谷歌沙特新AI中心

言寡意多

Kafka 可观测性最佳实践

观测云

kafka

MySQL 8.0 执行COUNT()很慢原因分析

GreatSQL

Playwright:掌握Web自动化测试的新利器

霍格沃兹测试开发学社

【论文速读】| APOLLO:一种基于 GPT 的用于检测钓鱼邮件并生成警告用户的解释的工具

云起无垠

鸿蒙Flutter实战:05-使用第三方插件

少湖说

flutter 鸿蒙 HarmonyOS

使用机器学习,轻松预测问题产品,低成本高效率解决产品质量监测需求

Altair RapidMiner

人工智能 数据分析 数据科学 altair RapidMiner

度量数据是人工凭感觉录入的,产生的偏差如何解决?

思码逸研发效能

DevOps 研发效能 效能度量 研发效能管理

TDengine 签约蘑菇物联,改造通用设备工业互联网平台

TDengine

数据库 tdengine 时序数据库

实时防护,清洗服务可用性达99.95%,江苏杰邦芜湖DC安全基地正式上线

江湖老铁

亚太地区人工智能应用加速,战略数据管理仍是关键

财见

鸿蒙Flutter实战:08-如何调试代码

少湖说

flutter 鸿蒙 HarmonyOS

鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙

少湖说

flutter 鸿蒙 HarmonyOS

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