Github Too Large File Deny

今天 push code 到 Github 被拒绝了,真是比较恼火。Fix 这个问题花了好久,这里记录下怎么修复。

原因

具体的原因其实很简单就是因为 Github 限制可以同步文件的 size, 100 MB,如果你不购买 Github 的大文件存储服务。


remote: error: File Archive/Models/20181201/snapshot_model_100000.npz is 484.52 MB; 

this exceeds GitHub's file size limit of 100.00 MB

remote: error: File Archive/Models/20181202/snapshot_model_100000_20181202.npz is 484.48 MB; 

this exceeds GitHub's file size limit of 100.00 MB


解决办法

其实很简单的方法就是首先删除已经记录下来的文件,然后重新推送。

修改 .gitignore

当然 Git 本身考虑了这种情况,所以重要的一个概念是保持 .gitignore 的精准,一般你创建一个文件的时候就应该考虑是不是要记录该文件,所有不需要记录的文件可以放在 tmp 文件夹中,然后忽略该文件夹。

如何恢复 .gitignore

如果你遇到了大文件错误,其实你就已经记录了大文件的修改。这个时候需要从已经 commit 的修改中删除掉。

这次恢复在修改内部 Git 的缓存区花了大量的时间,最后其实是直接重置了 commit 的 HEAD 到提交之前,然后在重新提交。这样彻底恢复了 Git 的历史记录。


git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch stage2' HEAD

参考这个 Stackoverflow 的帖子 Can’t push to GitHub because of large file which I already deleted

优点就是直接忽略掉你已经提交的历史,不需要处理复杂的内部循环删除问题。

当然再次 push 的时候需要用 -f 选项。

如果不太复杂的 commit 可以 git rm --cached .idea

Clear git local cache

Written on February 5, 2019