如何从Git历史记录中删除“文件过大”?

9
我将一个212MB的文件添加到我的文件夹中并提交,然后尝试推送它。Git告诉我文件太大了,所以我无法推送它。我删除了该文件,但当我尝试推送代码时,它仍然显示。
我的实际步骤是:
1. 我运行了git add .命令。 2. 然后运行了git commit -m "New css"命令。 3. 然后运行了git push origin development命令。 4. 然后等待很长时间才运行上述命令。最后显示"path/to/file/file.mp4 is 212MB which is too big. Failed to push"。 5. 然后我手动删除了那个文件。 6. 再次尝试推送,仍然出现同样的问题。
我被其他stackoverflow答案告知使用git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD命令。
我只是想理解这意味着什么。这会影响整个repo还是只影响上述文件?如果我已经手动删除了文件,会发生什么?因此,文件路径不存在。
例如,由于我尝试将其推送到开发分支,我运行了git push origin development命令。这失败了,所以假设我要删除的文件名为Testing.mp4,那么应该是这个代码:
git filter-branch --tree-filter 'rm -rf public/uploads/videos/testing.mp4' HEAD
我是对的吗?再次强调,这只会删除视频文件,不会影响其他任何东西。

1
你是怎么删除文件的?用的是 rm 命令吗?还是运行了 git rm 命令? - bencripps
@bencripps 不是,我在本地回到我的网站,然后点击了“删除”,然后检查了文件夹,它不再存在。没有通过git删除。 - LizzyTheLearner
您可以运行git rm命令。 - Happy Patel
2个回答

3
从文件系统中删除文件并不意味着从git中删除,如果之前将其添加到索引(git add path/to/file),只会记录删除操作。
根据您之前的操作,git 可能正在尝试按顺序推送各种操作:首先添加文件(由于文件大小而失败),然后再删除它。
要实际停止跟踪此文件,您可以尝试将其从索引中删除:git rm --cached path/to/file 请记住,稍后始终使用 git rm 删除有问题的文件,而不仅仅是删除它,git rm 将同时删除文件并从索引中删除。
manojlds 的一个很好的解释在这里

嘿,谢谢你的回答。我更新了我的问题。我还需要执行“git rm --public/uploads/videos/testing.mp4”吗? - LizzyTheLearner
@Eddie 它给了我以下错误信息:“fatal: pathspec path/to/file did not match any files”。我尝试了git rm和git rm --cached,但都不行 :( - LizzyTheLearner
顺便说一下,另一种“回来”的方法是将您的存储库重置为工作提交,因为推送失败了,即对于上一个提交:git reset --hard head~1(先备份文件以防万一;) - Antoine Prevot
@LizzyTheLearner 为什么不检查一下 git status 并查看你删除的文件去了哪里?如果它在“已删除”部分中,那么您可能需要执行另一个命令:git add .git commit -am "delete large file" - Eddie
很高兴你能够保存你的代码库!也许你应该编辑你的问题,包括可行的解决方案,因为我的答案在你的情况下不相关 :/ - Antoine Prevot
显示剩余4条评论

0

你的项目包含大小超过100MB的文件,你可以在上传到Github之前使用BFG Repo-Cleaner删除这些大文件。

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

下载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

无法使用GitLab和ssh://git@mygitlab.com:20033/mynamespace/my-repo.git。 - Dimitri Kopriwa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接