Git 代码库膨胀漏洞:微软工程师揭示缺陷,修复方案即将推出

微软工程师 Jonathan Creamer 近日发现 Git 中一个会导致代码库膨胀的缺陷,并发布了修复方案。 这一发现引发了开发者社区的广泛关注,因为代码库膨胀不仅会占用过多的磁盘空间,还会导致 Git 运行缓慢,甚至完全失败。

问题根源:文件名哈希算法缺陷

Creamer 在使用一个大型 JavaScript Git存储库时,发现克隆该库竟然消耗了 178GB 的磁盘空间,远超预期。他咨询了 Git 贡献者 Derrick Stolee,后者发现问题在于 Git 在比较文件名时,会对路径名进行哈希运算,而当前的哈希算法只考虑了路径名的最后 16 个字符,这会导致文件名冲突,从而导致代码库膨胀。

Stolee 举例说明,在同一个代码库中,多个项目可能都包含名为 CHANGELOG.md 的文件,但这些文件实际上来自不同的软件包,Git 在比较这些文件时,会错误地认为它们是同一个文件,并记录下所有差异,导致代码库膨胀。

修复方案:引入 path walk API

为了解决这个问题,Stolee 向 Git 提交了一个 Pull 请求,添加了名为 “path walk API” 的新功能。该 API 可以按路径对 Git 对象进行分组,从而避免文件名冲突。

Creamer 使用新增的 -path-walk 参数,将 git repack 命令应用于大型存储库,结果库的大小减小到了 5GB,显著节省了磁盘空间。

影响范围:大型存储库受影响较大

虽然新选项可以显著节省空间,但这些例子都是大型存储库,有很多潜在的文件名冲突。典型的 Git 存储库无法以同样的方式受益。

开发者呼吁:尽快修复漏洞

尽管如此,开发者们还是希望在 Git 的发行版本中尽快看到这些新功能,以解决代码库膨胀的问题。

专家建议:关注代码库大小

专家建议开发者们关注代码库的大小,并定期使用 git repack 命令进行压缩。如果发现代码库膨胀过快,可以考虑使用 -path-walk 参数进行优化。

总结:

Git 代码库膨胀是一个普遍存在的问题,微软工程师的发现和修复方案为解决这一问题提供了新的思路。开发者们应关注代码库大小,并及时采取措施,避免代码库膨胀带来的负面影响。

参考文献:


>>> Read more <<<

Views: 0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注