使用git 时 遇到大于50M的文件时的处理

项目使用的git进行版本控制,在上传时因为编译器自动生成了一个bin文件大于100M而使git报错;

错误如下:

Total 1323 (delta 522), reused 0 (delta 0)

remote: warning: Large files detected.

remote: warning: File MyluaTest/runtime-src/proj.android/obj/local/armeabi/libcocos2dlua.so is 54.39 MB; this is larger than Git@OSC's recommended maximum file size of 50 MB

remote: error: File MyluaTest/runtime-src/proj.win32/Debug.win32/MyluaTest.pdb is 112.75 MB; this exceeds Git@OSC's file size limit of 100 MB

remote: error: hook declined to update refs/heads/master

To https://git.oschina.net/.../....git

! [remote rejected] master -> master (hook declined)

error: failed to push some refs to 'https://git.oschina.net/..../.....git'

出现警告是文件大于50M  出现错误是文件大于100M。

解决办法:

如果文件只commit过一次(没有重复commit),并且没有上传:

1.  cd 项目目录;(切换到项目目录)

2.  git rm --cached file(file是要移除的文件)

3.  git commit --amend -CHEAD,

执行完最后一步后,这个大文件将会从你的commit记录里移除,并且以后commit都将不会再把它commit了,这时候就可以git push把本地代码push上了

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

如果文件多次commit上传:

如果做了这几步你push的时候还是报和开始的时候一样的错,那说明这个文件你不是最近一次commit时添加的,而是在之前commit过很多次了,这就需要把关于这个文件的所有历史commit记录全部清除掉,这时候我们就需要用到一个叫BFG的工具。我们要到https://rtyley.github.io/bfg-repo-cleaner/#download这个网站去下载并学习如何使用这个工具。首先先得把这个软件下载下来,双击它,如果你的电脑没有java的SDK,按照提示安装好,否则BFG将运行不了。好了之后,我们要cd进BFG文件所在目录,

第一步输入命令$ java -jar   bfg.jar  --strip-blobs-bigger-than 100M some-big-repo.gi t(带删除线的分别是:BFG工具的名字,要处理文件的大小,文件的路径),

第二步cd some-big-repo.git,(切换到文件路径)

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

第四步git push,

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

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

你可能感兴趣的:(使用git 时 遇到大于50M的文件时的处理)