如何删除"太大"来自git历史的文件?

时间:2017-07-17 02:31:52

标签: git github

我在我的文件夹中添加了一个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. 再次尝试推,同样的问题。

  7. 其他stackoverflow答案告诉我使用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

    我是对的吗?同样,这只会删除视频而不会删除其他内容吗?

    非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

根据你以前的做法,git可能会尝试按顺序推送各种操作:首先添加文件(由于文件大小而失败)然后将其删除。

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

请记住以后总是" git rm"一个有问题的文件,而不是简单地删除它,git rm将删除文件并同时从索引中删除它。

manojlds的一个很好的扩展就在于:"git rm --cached x" vs "git reset head -- x"?

问候

答案 1 :(得分:0)

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

有一个有关How to solve Github import error: "We found an error during import"的教程。记住要备份您的项目源代码和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