如何清除.git文件夹中的大文件

如何清除.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#

你可能感兴趣的:(如何清除.git文件夹中的大文件)