#概要
ローカルで開発していたgitプロジェクトをgithubにあげようとしたらpushに失敗しました。
ログを見ると、ファイルサイズが100MBを超えていてrejectされたとのことでした。
容量が大きいファイルは主に.git/objects
であり、これはcommitなどの差分ログなどを管理している場所らしいです。
以下の通り、不要な履歴を削除したところ、無事pushできました。
git_find_big.shをダウンロードし、対象のgitディレクトリに移動。自分も移動し、実行。
ファイルサイズの大きいログを特定します。
$ sh git_find_big.sh
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
-e size pack SHA location
875768 184789 561b02bb28c310f6967f392e7364f08f860a20cd mecab/dic/mecab-ipadic-neologd/sys.dic
3382 1636 79ac3475574d2b3374156ca9ec4db9e31744d0f7 mecab/dic/mecab-ipadic-neologd/matrix.bin
1407 289 4f457bb9b0cd43c8aacc7db27c15c8447134c280 lib/python3.8/site-packages/MeCab/_MeCab.cpython-38-darwin.so
275 148 0fd855f46465b1ba48d8490c912196ce0590bfb3 lib/python3.8/site-packages/certifi/cacert.pem
266 62 7ebc7eb994bba9ed32f30d557af93627cae4d543 lib/python3.8/site-packages/pip/_vendor/pyparsing.py
256 0 09451e3eabee98e979fed8494bef8d2087e23dca mecab/dic/mecab-ipadic-neologd/char.bin
235 84 ccf658ba558769b21c78158d4897766fabde3420 lib/python3.8/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-38.pyc
197 37 3766dd49f6d6172a497c40a5d74c6e3f1ff85b05 lib/python3.8/site-packages/idna/uts46data.py
173 37 ab8fd4d23761f29252da7d7083df93eb3224c4c2 lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc
119 23 0cdcd12021a349d69e238fdb79d1afdc12248552 faq/botanswer.json
MeCab関係の差分ログが大きかった模様です。これらの履歴を削除していきます。
$ git filter-branch --index-filter "git rm -r --cached --ignore-unmatch ファイル名" -- --all
その後整理をします。無事容量が削減されました。
$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ du -sh .git/objects
7.6M .git/objects
参考
LAN内専用のGitリポジトリを減量したい | すたらブログ
[巨大なファイルを含んだリポジトリの履歴を改変して GitHub にインポートする方法]
(https://qiita.com/osakiy/items/cf59c7a535f2fb1c0f90)