はじめに
この記事は、過去 GitBucket
から GitHub
への移行時に、
ファイルサイズ超過エラーが発生した際の対応方法を記述した記事になります。
他の方も書いている内容にはなりますが、どなたかの一助になれば幸いです。
注意点
この記事の手法を使うとGitリポジトリの履歴を書き換えることになり、
他メンバーが対象リポジトリをクローンしていると、整合性が合わなくなってしまいます。
自身のケースでは GitBucket
から GitHub
への移行という、完全クリーンな状態で
実施した内容にはなりますので、その点ご留意ください。
どんなエラーか
下記のエラーです。
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
エラーの原因
文言通りですが、ファイルサイズ超過のエラーです。
GitHubでは100MB超えのファイルを保存することができないため(Git LFSを使用すれば可能)、
GitHubへのPUSH時にエラーになる現象となります。
Git LFS
については下記の方が解説くださっていますので、ここでは省きます。
https://qiita.com/ikmski/items/5cc8b8832336b8d85429
対策方法
対象ファイルを検索
まずは、リポジトリ内で下記のコマンドを実行し、100MB超えのファイルを検索します。
% find . -size +100M -ls
XXXXXXXX XXXXXXX -rw-r--r-- 1 user group 316274484 3 16 12:00 ./hoge.zip
対象ファイルを履歴から削除
自身のケースでは、対象ファイルがGit管理不要なもの(そもそもそんなものを追加するなって思いますが)だったので、
Git履歴から全て削除を行いました。
git filter-branch
という非常に破壊的なコマンドがあるので、そちらを利用しました。
簡潔にいうと git filter-branch
は大量のコミット履歴を一括で書き換えることのできるコマンドになります。
パスワードやキー情報を誤ってコミットしてしまった履歴や、今回のようなエラーの発生時が主なユースケースになると思います。
(とはいってもかなり破壊的なコマンドなので、可能なら使いたくない・・・。)
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch ./hoge.zip' HEAD
現在の内容をPUSH
履歴の削除後、現在の状況を強制的にPUSHします。
(developブランチの場合)
git push -f origin develop
これで履歴から100MB超えのファイルが削除され、 GitHub
への移行が可能なはずです。
また、この手順は公式が出している下記の記事が参考になるかもしれません。
機密データをリポジトリから削除する
最後に
git filter-branch
は使いどころをちゃんと考えたいコマンドですが、
使い方さえ誤らなければ非常に便利なコマンドだと思います。
そもそも使う必要がある状況に陥らないことが最優先だと思いますが・・・。
git、痒いところに手が届く感じがすごく便利です。
共に働くWebエンジニアを募集しています!
不動産SHOPナカジツでは自社サービスを作っていく仲間を募集しています。
詳しくはWantedlyからお問い合わせください。