filter-branchを使っても、ローカルの.gitのサイズが小さくならない
.gitの軽量化に関する質問です。
Eclipseのワークスペースをgit管理しています。
git管理を始めた時、.gitignoreを書き忘れていたため、「.metadata」と「.recommenders」のフォルダも管理されてしまいました。このフォルダの中身はソースコードとは直接は関係なく、自動的に生成されるファイルであり、commitするたびに大量の自動生成ファイルも変更があったとして一緒にcommitされてしまいます。
おかげで.gitフォルダのサイズが大きくなってきてしまいました。
.gitフォルダの軽量化のために、.gitignoreを作成し、以下のサイトに従って「.metadata」と「.recommenders」を管理から外し、履歴から削除しました。
https://qiita.com/kaneshin/items/0d19fc1cd86f931dc855
https://developers.eure.jp/tech/alternative-git-history/
また、上記の操作だけではローカルの.gitのサイズが減らないという事で以下のサイトにあるように、次の操作をしました。
http://easyramble.com/git-filter-branch.html
https://help.github.com/articles/removing-sensitive-data-from-a-repository/
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
$ git reflog expire --expire=now --all
$ git gc --prune=now
しかし、結局.gitのサイズが小さくなりませんでした。
上記の操作後も、まだ.gitの中に「.metadata」と「.recommenders」内のファイルが残ってしまっているようです。
USER-MacBook-Air:workspace user$ ./git_find_big.sh
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
size pack SHA location
28036 10111 50646ee98af5fa19a4538a727261cd73304cddeb .metadata/.plugins/org.eclipse.jdt.core/3352301917.index
7054 2191 630a04c4153d31b0b917a52b6eb24514dcbc0f50 .metadata/.plugins/org.eclipse.jdt.core/1940685342.index
4904 828 ba10aebf34fd60bd0cf5b583a3cd7a26265bf602 .recommenders/index/http___download_eclipse_org_recommenders_models_neon_/_2.fdt
4198 865 ecd13c61f37be37a57f64452e4d89ae7fcac5e59 .metadata/.plugins/org.eclipse.jdt.core/2071773772.index
4021 1243 0b4fb63b024e896069e4297d5828a4853a0e33b0 .metadata/.plugins/com.python.pydev.analysis/python_v1_874innp8uovopkka84p4pwnaw/python.pydevsysteminfo
3941 1218 0b692374a3adaa49fa0744bb5ef7d12c99ed743c .metadata/.plugins/com.python.pydev.analysis/python_v1_874innp8uovopkka84p4pwnaw/python.pydevsysteminfo
3883 1198 096c00c9afb87e9fc4f8794862e668ef81acee6e .metadata/.plugins/com.python.pydev.analysis/python_v1_874innp8uovopkka84p4pwnaw/python.pydevsysteminfo
3497 1077 9781c44e0f3721f3b5299dd8a9537e733adc56f5 .metadata/.plugins/com.python.pydev.analysis/python_v1_874innp8uovopkka84p4pwnaw/python.pydevsysteminfo
2878 856 5d4b2620c4d6572690ab4ce341e7d29827f3a302 .metadata/.plugins/com.python.pydev.analysis/python_v1_bm109oo8jsa5gnqmc06ekl12p/python.pydevsysteminfo
2873 855 180f6531173e20a51fcc648e80ecf7133379df62 .metadata/.plugins/com.python.pydev.analysis/python_v1_bm109oo8jsa5gnqmc06ekl12p/python.pydevsysteminfo
どうしたら.gitのサイズを小さくすることができるでしょうか?
皆様の助言お待ちしております。よろしくお願いいたします。
追記:
git_find_big.shは以下のようなスクリプトになっています。
#!/bin/bash
#set -x
# Shows you the largest objects in your repo's pack file.
# Written for osx.
#
# @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
# @author Antony Stubbs
# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output
IFS=$'\n';
# list all objects including their size, sort by size, take top 10
objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head`
echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file."
output="size,pack,SHA,location"
for y in $objects
do
# extract the size in bytes
size=$((`echo $y | cut -f 5 -d ' '`/1024))
# extract the compressed size in bytes
compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024))
# extract the SHA
sha=`echo $y | cut -f 1 -d ' '`
# find the objects location in the repository tree
other=`git rev-list --all --objects | grep $sha`
#lineBreak=`echo -e "\n"`
output="${output}\n${size},${compressedSize},${other}"
done
echo -e $output | column -t -s ', '
さらに追記:
上記の操作を行ったのち、リモートリポジトリから改めてローカルにクローンしてみたところ、クローンしたリポジトリ内の.gitフォルダのサイズは縮小されていました。
上記の操作によってきちんと.metadataと.recommendersの削除は行われていたようです。
クローンした.gitをサイズの小さくならなかった元々の.gitと置き換えることで、とりあえず当初の目的を達成することはできました。
なぜローカルのサイズが小さくならなかったのかは未だに分かりませんが、とりあえずサイズの縮小はできたという報告をしておきます。