クリア方法gitフォルダ内の大きなファイル
2597 ワード
クリア方法gitフォルダ内の大きなファイルうっかり第三者ライブラリを提出してしまいました...どうしよう...
Step1.大きなファイルが見つかりました
1.1 count-objectsを実行してスペース使用を表示する
実行結果
size-packはkb単位で示すもので、約136 M+の空間が使用することがわかる.
1.2大きなファイルを見つける
出力3列目の情報であるファイルサイズをソートし、最大4つのファイルを取得する.
実行結果
最後のファイルが54 M+のスペースを占めていることがわかります.次のコマンドでファイルの名前を見つけます.
実行結果
サードパーティライブラリもgitに転送されたのか...それでは次にすべてのNIMSDKライブラリに関する大きなファイルを探し出しましょう
実行結果でNIMSDK関連の部分が見つかりました(一部のみ表示)
確認したらPodsフォルダの中にあります!しかもPodsフォルダにはNIMSDKに関するファイルしかありません.次に削除します.
2.gitと大ファイルの参照関係を削除する
filter-branchでgitを巡回し、Podsフォルダ内のファイルとの参照関係を削除します.
履歴にはそれらの大きなファイルへの参照は含まれていません.
3.倉庫移転
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#
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単位で示すもので、約136 M+の空間が使用することがわかる.
1.2大きなファイルを見つける
出力3列目の情報であるファイルサイズをソートし、最大4つのファイルを取得する.
$ 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
最後のファイルが54 M+のスペースを占めていることがわかります.次のコマンドでファイルの名前を見つけます.
$ 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#