清理巨大的 Git 存储库

Posted

技术标签:

【中文标题】清理巨大的 Git 存储库【英文标题】:Cleanup Huge Git Repository 【发布时间】:2015-04-15 01:31:08 【问题描述】:

我的公司有一个 15 年以上的单一 git 存储库,并且非常庞大,其中大约 60% 可以存档。我想找到这些脚本(python、perl、ruby、java 等)并创建一个只包含常用脚本的新 git 存储库。脚本也有交叉依赖。

我认为的一个解决方案是设置 inotify 以监视 git repo 中的文件并收集最近访问的脚本的名称,收集几个月的数据,然后根据该数据创建新的 repo。但不确定它的效率如何。

我认为的另一个解决方案是对每个文件使用 git commit date 并删除超过 5 年的文件。

谁能告诉我一个有效的解决方案来清理这个烂摊子?或者任何类似于 NewRelic 的工具可以监控文件系统?

【问题讨论】:

请注意,删除 60% 的 repo 会将大小减少到大约三分之一,这听起来不会有很大的不同。在考虑更多涉及的程序时需要考虑的事项。 哈哈。你有沼泽吗?祝你好运。您必须至少一整年,因为您不知道每年可能会调用什么。 . .手动,由一个你从未见过的人,在你不知道存在的办公室里,你从未听说过他的工作。在这样的沼泽中没有分配的责任。我从未见过任何公司成功清理过任何一家公司。搞砸的政治曝光太令人无法忍受了。 60% 的减少是巨大的。我很高兴能得到 10% 的折扣。尽管听起来很疯狂,但我们运气不错,只是对所有看起来不需要的东西进行了核爆,然后如果有人抱怨他们失踪了,就把它们带回来。显然,这取决于您的业务环境是否可行。 哈哈.. 这听起来是个不错的计划@AndrewC... 是的,60% 对我们来说也相当大。此外,在分析时,我什至发现了 .mp3、.wav、.tar.bz 文件......这太疯狂了,是的,它是一个沼泽 [at]jthill 您想减少 Git 的历史记录以解决 .git 目录的克隆时间和磁盘大小问题,还是签出的大小有问题? 【参考方案1】:

首先,不清楚您要解决什么问题。克隆时 15 年的 git 历史是否会减慢速度?如果是这样,也许只是做一个浅 git clone 代替? (即浅锥不会下载历史记录。)

正如 Thilo 指出的那样,将 repo 减半不会让事情变得快得多。

但是,如果脚本真的那么杂乱无章,很可能其中一些需要重写、记录等。如果您只是将脚本向前推进,那么您很可能也会将许多低效率的地方也向前推进。我会一次接一个,给他们一点爱,测试他们,等等。

一个想法:您可以使用strace -ff -o strace.out ./myscript 找出脚本打开的其他文件。

【讨论】:

主要问题是由于性能问题,我们无法很好地利用 git 之类的分支。这是一大堆乱七八糟的东西,而且每天都在增长。因此,我的目标是使代码库保持干净并使用常用脚本保持最新状态 :) @user2896673:为什么存储库的大小会阻止分支?

以上是关于清理巨大的 Git 存储库的主要内容,如果未能解决你的问题,请参考以下文章

text Git清理存储库

清理git存储库

GIt:使用BFG从存储库中删除了几个文件,并且存在巨大的提交差异

vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树。请问是啥问题,如何解决。

从存储库历史记录中删除大文件后,Git 存储库仍然很大

从TFS数据库“销毁”Git存储库