内容提要
Debian使用Git存储库来维护软件包,但大量数据导致存储问题。他们通过使用git clone --filter命令找到了解决方案,这显著减小了存储库的大小。总体磁盘消耗从近300GB减少到15GB。
延伸解读
Git 过滤器的实际效果
文章展示了使用 git clone --filter blob:none 和 tree:0 后,存储库大小分别缩小到原来的 1/100 和 1/1000。在 qa.debian.org 上部署后,整体磁盘消耗从近 300GB 降至 15GB,减少了 1/20。这表明过滤器能大幅节省存储空间,尤其适合只需少量文件内容的场景。
为何浅克隆效果有限
Debian 曾尝试用浅克隆(git clone --depth=50)来减少存储,但仅节省了百分之几的空间。这是因为浅克隆仍会获取完整的文件内容(blob),而 Debian 只需要 debian/changelog 等少量文件。因此,针对性地过滤 blob 或 tree 比限制提交深度更有效。
被忽视的社区建议
Gábor Németh 在 bug 报告中建议使用 blob:none 过滤器,但该建议被忽视近一年,直到再次出现磁盘满事件才被尝试。这提醒我们,开源社区中的有效方案有时需要主动跟进和验证,避免因忽视而延误问题的解决。
对日常使用的启示
作者在文末提到“也许我应该让所有 git 克隆都使用这些过滤器”。对于只需要部分文件或提交历史的用户,使用 blob:none 或 tree:0 可以显著减少克隆时间和磁盘占用。但需注意,运行时需要文件内容时会从上游透明获取,可能增加网络延迟。
Q&A
Debian如何管理其软件包的存储?
Debian通过使用Git存储库来维护软件包,主要托管在salsa.debian.org上,并运行vcswatch服务跟踪所有包装存储库的状态。
使用git clone --filter命令有什么好处?
使用git clone --filter命令可以显著减少克隆的存储库大小,例如使用blob:none过滤器后,存储库大小缩小到原始大小的1/100。
Debian在存储库管理中遇到了什么问题?
Debian面临的主要问题是Git数据的存储需求,导致scratch分区扩展到300GB,且浅克隆仅节省了少量空间。
如何通过git过滤器减少存储需求?
可以使用git clone --filter blob:none和tree:0过滤器来减少存储需求,前者使克隆大小缩小到1/100,后者进一步缩小到1/1000。
Debian的整体磁盘消耗减少了多少?
通过使用git过滤器,Debian的整体磁盘消耗从近300GB减少到15GB,减少了1/20。
Gábor Németh的建议是什么?
Gábor Németh建议使用git clone --filter blob:none来解决Debian的存储问题,这一建议在bug报告中被忽视了近一年。