LoginSignup
10
2

More than 3 years have passed since last update.

GitHubのファイルサイズ超過エラーについて

Last updated at Posted at 2020-03-16

はじめに

この記事は、過去 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からお問い合わせください。

10
2
2

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
10
2