我有一个名为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。
如果有的话,我做错了什么?如何诊断和浪费这个浪费的空间?
答案 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
指针的祖先中的每个提交。然后,您必须将所有其他分支和标签更新为这些新创建的提交,以完全从您的仓库中移除行李。