美文网首页
GitHub不小心上传了大于100M文件,上传不上去

GitHub不小心上传了大于100M文件,上传不上去

作者: 低调的小宋 | 来源:发表于2017-03-15 13:28 被阅读0次

    本人在公司项目中不小心打包了一个125m的文件,接着push上去提示报错了。在网上搜了不少方法,结合自己的尝试,终于把问题解决,现在记录下来,希望有同样遇到此坑的同学们少走一些弯路。

    1、报错:

    自己的项目的版本控制用的是Git,代码仓库在github托管。项目里用到了百度导航SDK,由于百度导航SDK有了新版本,于是就更新到了新版本,更新好了之后想把代码push到github上,结果出错了,被拒绝,具体信息是:

    Total3007(delta664), reused0(delta0)

    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.ais102.68MB;thisexceeds GitHub's file size limit of 100.00 MBTo https://github.com/XXX/XXXX.git。

    2、原因:

    意思是有大文件,更多信息可到http://git.io/iEPt8g查看,文件libbaiduNaviSDK.a的大小超过了GitHub限制的100M大小。想要push,必须把这个文件移除,可是要怎么移除呢?开始我是想着直接删除掉libbaiduNaviSDK.a,结果不行,还是会报上面的错,于是我又把libbaiduNaviSDK.a放到忽略文件里,结果还是不行,还是说有大文件,报同样的错。这下只能老老实实的看官方的解决办法了,于是就打开http://git.io/iEPt8g老老实实的研究了一番。大意是说为了便于管理代码库和方便合作伙伴们使用,当你push50M以上的文件时github将会警告,当push100M以上文件,就直接拒绝你的push,要想push必须把该文件从本地仓库和远程仓库全部移除掉。这个移除会永久性的从本地git和github里移除,如果这个文件很重要,要记得做一次备份。

    3、解决办法:

    下面进入具体操作,如果这个文件是最近一次commit的,并且你还没有push到github

    (1)那么第一步输入命令cd /Users/Dora/Desktop/XXX(cd后面的这个路径要换成你自己项目的路径)

    (2)然后第二步输入命令git rm --cached /XXX/XXX/libbaiduNaviSDK.a(自己的要移除的文件的路径)

    (3)第三步输入命令git commit --amend -CHEAD,执行完这步后,这个大文件将会从你的commit记录里移除,并且以后commit都将不会再把它commit了,这时候就可以git push把本地代码push到github上了。

    4、注意:

    注意:这里可能遇到输入git rm --cached /XXX/XXX/libbaiduNaviSDK.a命令后说找不到你要删除的文件的问题,出现这个问题的原因是你要删除的文件路径名没写对,一定要仔细检查,确保要删除的文件的路径是正确的。

    5、仍然报错的解决办法:

    如果做了这几步你push的时候还是报和开始的时候一样的错,那说明这个文件你不是最近一次commit时添加的,而是在之前commit过很多次了,这就需要把关于这个文件的所有历史commit记录全部清除掉,这时候我们就需要用到一个叫BFG的工具。我们要到https://rtyley.github.io/bfg-repo-cleaner/#download这个网站去下载并学习如何使用这个工具,使用如下:

    (1)首先先得把这个软件下载下来,双击它,如果你的电脑没有java的SDK,按照提示安装好,否则BFG将运行不了。

    (2)好了之后,我们要cd进BFG文件所在目录,然后操作如下:

    第一步:输入命令java -jarbfg.jar--no-blob-protection --strip-blobs-bigger-than50Mmy-repo.git

    第二步:cd my-repo.git

    第三步:git reflog expire --expire=now --all && git gc --prune=now --aggressive

    第四步:git push,到此大功告成。你的commit历史里所有大于50M的文件的commit全部被清除,这样你就可以push到github上了。

    注释:红色部分是你下载下来的文件的名字,蓝色部分是你需要移除的文件大小,橙色部分是你自己.git文件的路径

    6、继续注意:

    这里可能遇到输入命令java -jar bfg.jar--strip-blobs-bigger-than 50Mmy-repo.git后bfg运行不成功的问题,原因是java -jar bfg.jar这个命令必须要在bfg.jar所在目录下运行才行,否则系统将不知道bfg.jar文件在哪里,所以执行不成功。所以我们要先cd到bfg.jar所在目录,然后在执行ava -jar bfg.jar--strip-blobs-bigger-than 50Mmy-repo.git命令。对于不熟悉命令行的人来说最容易犯这些错误了。

    相关文章

      网友评论

          本文标题:GitHub不小心上传了大于100M文件,上传不上去

          本文链接:https://www.haomeiwen.com/subject/wfqfettx.html