1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Git pushで容量が大きくて失敗した際にしたこと

Posted at

すぐ忘れそうなので、自分用のメモとして

参考にした記事

問題

かなり前に作ってGit管理など何もしていなかった状態のサイトを、サーバーの載せ替えをする際に起きた問題。

FTPでダウンロードしたファイルをすべてGit管理に放り込んでpushしたところ、容量が大きすぎてpushできないよと怒られました。

無駄に大きいPDFファイルなどを、.gitignore に書いて git rm -rf --cached <ディレクトリorファイル> してGit管理から外したのですが、それでも容量が大きいと怒られたので困っていました。

原因

重いファイルはGit管理を外したのに、何がそんなに重いのかと調べたら、 .git/objects がかなり重いようでした。

Gitで履歴をすべて記録しているので当たり前ですね。

まだリモートリポジトリにpushもしていなかったので、ローカルのリポジトリごと一旦消して作り直しても良かったのですが、なんとなくコミット履歴自体は残しておきたかったので、対処法を探してみました。

対処法

冒頭に貼った参考サイトが全てです。

filter-branch を使えばいいということはなんとなく分かったのですが、どうも使い方がよくわからなかったので、複数の記事で同じ方法を採っているのを見つけて、大丈夫だと思って実行しました(おい)

ちゃんとドキュメント読んで理解してから実行するのがベストなのですが、ちょっと時間がなかったので横着しました。

以下、コマンドのみまとめ

$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch <ディレクトリorファイル>" --prune-empty -- --all

$ rm -rf .git/refs/original/

$ git reflog expire --expire=now --all

$ git gc --aggressive --prune=now

refloggc が何をしているのか、よく分かっていませんが、コマンド実行後、.git の容量が大幅に下がったので、履歴から大容量ファイルの削除に成功したようです。

これで、push したら上手く行ったので、無事完了です。

この記事は自分用のメモなので、同じ問題に直面している方は、参考元の記事の方を御覧ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?