如何从 git 历史记录中删除"too large"文件?



我在我的文件夹中添加了一个 212MB 的文件并提交并尝试推送它。Git 告诉我文件大小太大,所以我无法推送它。我删除了该文件,但当我尝试推送代码时它仍然显示。

我的实际步骤是:

  1. 我做了git add .

  2. 然后git commit -m "New css"

  3. 然后git push origin development

  4. 然后运行上述命令花了很长时间。它以"path/to/file/file.mp4是212MB结束,这太大了。推不动失败"。

  5. 然后我手动删除了该文件。

  6. 尝试再次推动,同样的问题。

其他堆栈溢出答案告诉我使用git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD

我只是想理解这意味着什么。这会影响我的整个存储库还是仅影响上述文件?如果我已经手动删除了文件,会发生什么情况?因此,文件路径不存在。

例如,由于我尝试推送到开发分支,因此我确实git push origin development.这失败了,所以假设我尝试删除的文件名为 Testing.mp4,这应该是代码:

git filter-branch --tree-filter 'rm -rf public/uploads/videos/testing.mp4' HEAD

我说的对吗?同样,这只会删除视频,没有别的?

如果文件之前已添加到索引(git add path/to/file(,则从文件系统中删除文件并不一定意味着将其从 git 中删除,而只需记录删除操作。

根据您之前所做的操作,git 可能会尝试按顺序推送您的各种操作:先添加文件(由于文件大小而失败(,然后删除它。

要实际停止跟踪此文件,您可以尝试将其从索引中删除:git rm --cached path/to/file

请记住,稍后要始终git rm有问题的文件,而不是简单地删除它,git rm将删除该文件并同时将其从索引中删除。

来自马诺伊尔德的良好驱逐就在这里

您的项目包含大小大于 100MB 的文件,您可以在放入 github 之前使用 BFG Repo-Cleaner 删除这些大文件。

有一个关于如何解决Github导入错误的教程:"我们在导入过程中发现了一个错误"。请记住备份您的项目源代码和 git 数据库。

Dowload BFG,用--mirror标志克隆你的仓库,然后运行:

java -jar bfg-1.13.0.jar --no-blob-protection --strip-blobs-bigger-than 100M your-repo.git
cd your-repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push

最新更新