排除在GitHub上的git存储库中删除大文件的故障

时间:2017-09-17 17:28:41

标签: git github bfg-repo-cleaner

我有一个名为geoplot的项目,它在Python中进行地理空间绘图。它的代码通过GitHub上的git分发。 You can check it out here

作为此软件包开发过程的一部分,我上传并存储在geoplot repo中一个名为data/的文件夹,其中包含大量不同格式的数据文件。这些数据文件用于填充免费example gallery中的示例。

但是,这些文件会使整个存储库大小膨胀到~150 MiB(issue)。这显然太过分了,现在是我摆脱它们的时候了。

问题是,我不仅要从当前HEAD中删除这些文件,还要将这些文件从整个git历史记录中删除。我尝试使用git rebase的手动方法无法正常工作。然后,我按照the canonical SO question on the matter中的建议尝试了BFG Repo-Cleaner工具。

BFG摆脱了文件的好处 - 它们在历史上的任何地方都不再存在。但是,回购的大小(在运行https://github.com/ResidentMario/geoplot.git时看到的)根本没有下降!

这是我尝试的(减去打印输出):

java -jar ../bfg-1.12.15.jar --delete-folders "data" .
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --set-upstream https://github.com/ResidentMario/geoplot.git master --force

完整的打印输出为in an issue on GitHub

如果有的话,我做错了什么?如何诊断和浪费这个浪费的空间?

2 个答案:

答案 0 :(得分:1)

我确实提到了reflog and gc back in 2010,还提到了removing old objects (注:gc should be followed by a repack

首先,检查是否再次克隆您的仓库,您仍然具有相同的尺寸。

由于OP Aleksey Bilogur提及in the comments

  • 您需要确保您的代码不引用旧数据,然后您还需要强制推送所有代码和分支(不只是master

    git push --tags origin --force
    
  • 必须从回购历史中删除
  • 生成的数据。

答案 1 :(得分:-1)

这听起来像是一个可以在没有外部工具的情况下通过利用filter-branch来解决的问题。

如果要删除data目录的所有历史记录,可以从回购站的根目录运行以下命令。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r path/to/data' HEAD

这将改变当前HEAD指针的祖先中的每个提交。然后,您必须将所有其他分支和标签更新为这些新创建的提交,以完全从您的仓库中移除行李。