首页 > 解决方案 > git filter-branch 不会删除我想要的所有文件

问题描述

我正在尝试清理包含生成的 pdf 文件的乳胶代码的 git 存储库,因为这些文件导致存储库膨胀到 300mb 的大小。

从这里的答案中调整一下如何从 Git 历史记录中删除文件?. 我尝试了以下命令:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.pdf' HEAD

这减少了一点尺寸,但没有我希望的那么多。然后,当我尝试在这个问题的答案中找到的脚本时:如何在 git 历史中查找/识别大型提交?,要查找哪些文件对大小有影响,它仍然显示几个 pdf 文件。但是,如果我尝试在这个问题中找到的脚本:Which commit has this blob? ,它找不到任何包含该文件的提交。

我已经删除了除本地分支之外的所有分支。我没有将更改推送到遥控器。

这些文件是否有任何理由仍然存在于某个地方的历史记录中?我还可以尝试哪些其他事情?

标签: git

解决方案


您可能仍然存在 blob,因为垃圾收集器没有收集它们。

尝试克隆本地存储库,并检查.git/新克隆中目录的大小:

git clone myrepodir myclone
cd myclone
du -sh .git

# you can then remove that clone :
cd ..
rm -rf myclone

这将更准确地了解将推送或克隆多少数据。


如果您 100% 肯定您的filter-branch操作后的内容就是您想要保留的内容,并且如果您不介意丢失您的 reflog(不再撤消,删除所有存储):您可以运行

git gc --aggressive --prune=now

有关git help gc可以保留在磁盘上的内容的更多详细信息,另请参阅。


推荐阅读