Bitbucket:从Git历史记录中删除文件夹

Bitbucket上托管Git时,硬限制为2 GB-如果超出该限制,则您只能对存储库进行只读访问。 例如,为防止这种情况,请追溯性地从提交中删除大文件夹或文件。 但是在其他情况下(如果访问数据已进入历史记录,或者node_modules又滑入了master数据库),则必须追溯性地操纵Git的历史,其本质是与之相反的。


Bitbucket为此撰写了一篇详细的文章 。 为了在某​​种情况下浏览整个过程,我们首先创建一个新的存储库:

位桶历史干净

然后,将存储库克隆到本地计算机上的空文件夹中:

6ab7686fc508ce87c52b10bb5d01ee51

现在,我们创建两个带有随机内容文件的子文件夹:

6ab7686fc508ce87c52b10bb5d01ee51

我们现在正在推动大师:

6ab7686fc508ce87c52b10bb5d01ee51

现在,我们在Bitbucket上几乎达到了2 GB的硬限制:

位桶历史干净

我们也可以在本地进行检查(请参阅“包装大小”):

6ab7686fc508ce87c52b10bb5d01ee51

位桶历史干净

现在的任务是追溯地从存储库中删除“ foo”,以将其大小减半。 为此,我们首先编辑当前的HEAD并将文件夹写入gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

最后,我们使用BFG Repo Cleaner删除文件夹(BFG需要系统上的当前JRE作为系统要求):

6ab7686fc508ce87c52b10bb5d01ee51

现在,我们在本地看到结果:

6ab7686fc508ce87c52b10bb5d01ee51

位桶历史干净

但是,由于尚未远程执行垃圾收集器,并且Bitbucket不会在每次推送时执行“ git gc”,因此存储库的大小尚未在Bitbucket上更改:

位桶历史干净

支持人员还确认了这一点:

位桶历史干净

因此,最好直接将请求发送support@bitbucket.org,以在存储库中手动运行“ git gc”。 不久之后,支持团队也这样做了:

位桶历史干净

如果现在“刚好”将存储库拖到另一台计算机上,则磁盘上最终将只有0.9 GB。 如果某人在本地仍然可以使用1.8 GB版本,则先使用“ git pull”再加上“ git gc”就足够了。

背部