1

我有一个名为的项目geoplot,它在 Python 中进行地理空间绘图。它的代码通过gitGitHub 分发。你可以在这里查看

作为这个包的开发过程的一部分,我上传并存储在geoplotrepo 中的一个名为的文件夹data/,其中包含大量各种格式的数据文件。这些数据文件用于填充免费示例库中的示例。

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

问题是我不仅需要从当前删除这些文件HEAD,还需要从整个git历史记录中删除这些文件。我尝试了一种手动方法git rebase,但没有奏效。然后我尝试了该BFG Repo-Cleaner工具,正如关于此事的规范 SO 问题中所建议的那样。

BFG 把这些文件删掉了——它们不再存在于历史上的任何地方。但是,repo 的大小(如运行时所见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

完整的打印输出在 GitHub 上的一个问题中

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

4

2 回答 2

1

我确实在 2010 年提到过refloggc但也删除了旧对象
(注:gc后跟arepack

首先,通过再次克隆你的 repo 来检查你是否仍然有相同的大小。

正如OP Aleksey Bilogur在评论中提到的那样:

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

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

于 2017-09-17T18:18:17.257 回答
-1

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

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

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

这将改变你当前HEAD指针祖先的每一次提交。然后,您必须将所有其他分支和标签更新为这些新创建的提交,以完全从您的存储库中删除包袱。

于 2017-09-17T23:07:50.163 回答