SanfenR的博客

GitHub不允许上传大于100M文件问题

问题

1
2
3
4
5
6
自己的项目的版本控制用的是Git,代码仓库在github托管。项目里用到了百度导航SDK,由于百度导航SDK有了新版本,于是就更新到了新版本,更新好了之后想把代码push到github上,结果出错了,被拒绝,具体信息是:Total 3007 (delta 664), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: Trace: 7b7de6b9372ee392e0f3961b05ea6f33
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File XXX/XXX/BaiduNaviSDK/libbaiduNaviSDK.a is 102.68 MB; this exceeds GitHub's file size limit of 100.00 MB
To https://github.com/XXX/XXXX.git。意思是有大文件,更多信息可到http://git.io/iEPt8g查看,文件libbaiduNaviSDK.a的大小超过了GitHub限制的100M大小。想要push,必须把这个文件移除,可是要怎么移除呢?

解决方案

第一种解决方案
1
2
3
4
5
6
如果这个文件是最近一次commit的,并且你还没有push到github,那么
第一步输入命令 cd /Users/Dora/Desktop/XXX
(cd后面的这个路径要换成你自己项目的路径),
然后第二步输入命令 git rm --cached /Users/Dora/Desktop/XXX/XXX/libbaiduNaviSDK.a(加下划线部分是你自己的要移除的文件的路径),
第三步输入命令 git commit --amend -CHEAD,
执行完这步后,这个大文件将会从你的commit记录里移除,并且以后commit都将不会再把它commit了,这时候就可以git push把本地代码push到github上了。

第二种解决方案

用到一个叫BFG的工具。我们要到[https://rtyley.github.io/bfg-repo-cleaner/#download]这个网站去下载并学习如何使用这个工具
1
2
3
4
5
6
7
8
9
我们要cd进BFG文件所在目录,第一步输入命令
java -jar bfg.jar --no-blob-protection --strip-blobs-bigger-than 50M my-repo.git
(红色部分是你下载下来的文件的名字,蓝色部分是你需要移除的文件大小,橙色部分是你自己.git文件的路径),
第二步cd my-repo.git ,
第三步 git reflog expire --expire=now --all && git gc --prune=now --aggressive,
第四步 git push,
到此大功告成。你的commit历史里所有大于50M的文件的commit全部被清除,这样你就可以push到github上了。这里只是记录了怎么处理遇到的问题,
如果想要知道原理,则需要好好好去学习学习。