如何清除.git文件夹中的大文件
- 不小心把第三方库提交上去了...怎么办...
Step1.找到大文件
1.1 运行count-objects 查看空间使用
$ git count-objects -v
执行结果
count: 302
size: 1208
in-pack: 4008
packs: 1
size-pack: 136897
prune-packable: 0
garbage: 0
size-garbage: 0
size-pack 是以kb为单位表示的,可以看出大约使用了136M+的空间.
1.2 找到大文件
对输出的第三列信息即文件大小进行排序,获取最大的四个文件.
$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -n | tail -4
执行结果
3d9c87e2f6afef65d42186ae8ec1ff368159db0f blob 29441232 12551486 6104728
8f527ad31d8d7fa944cd5a9a8a397143792d9874 blob 34741680 10231790 30056275
8f527ad31d8d7fa944cd5a9a8a397143792d9874 blob 34741680 10231790 30606600
1696a4dcf57e12bc086b06cd6ccc6fca3c10aad2 blob 36405168 15230074 54498174
可以看到最后一个文件占用了54M+的空间
然后通过下面的命令找到文件的名称
$ git rev-list --objects --all | grep 1696a4
执行结果
1696a4dcf57e12bc086b06cd6ccc6fca3c10aad2 Pods/NIMSDK/SDK/NIMSDK/libNIMSDK.a
原来是将第三方库也传到了git上...😢
那接下来把所有的NIMSDK库相关的大文件都找出来吧
$ git rev-list --objects --all
在执行结果中找到NIMSDK相关的部分(只列出部分)
898b1c3387231612c04e54cb52bdb96a79ffab58 Pods/NIMSDK/SDK/NIMSDK/Libs
f6a4e44810385b356ce50ef25b3a51cb498c5a3d Pods/NIMSDK/SDK/NIMSDK/Libs/libaacplus.a
9b081280e85bbb5bc71a3f7f460934d4581de657 Pods/NIMSDK/SDK/NIMSDK/Libs/libcrypto.a
d6021535586d095602466fa91733e4c84f294b35 Pods/NIMSDK/SDK/NIMSDK/Libs/libevent.a
8bb1d1c76786c4e2f2de1b6e83134bd4c0689296 Pods/NIMSDK/SDK/NIMSDK/Libs/libssl.a
1696a4dcf57e12bc086b06cd6ccc6fca3c10aad2 Pods/NIMSDK/SDK/NIMSDK/libNIMSDK.a
确认了一下 都在Pods文件夹里面! 而且Pods文件夹里只有与NIMSDK相关的文件. 接下来就是删除它们了.
2.移除git与大文件的引用关系
通过filter-branch遍历git,并移除与Pods文件夹中文件的引用关系
$ git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods'
现在历史记录中已经不包含对于那些大文件的引用了.
3.转移仓库
$ git clone file:///path/to/repository.
Note that the file:// makes a world of difference when cloning a local repository - only the referenced objects are copied across, not the whole directory structure.
译:注意当复制一个本地仓库的时候,file://让一切变得大不相同.--只有拥有引用关系的文件会复制过去,而不是所有的文件结构!
这样的话我们就可以通过这个方法丢掉那些大文件啦,于此同时保留的剩余的文件以及引用关系.
That's all.
转移仓库部分具体参见:
http://stackoverflow.com/questions/1029969/why-is-my-git-repository-so-big/1036595#