【解決】GitHubで100MB超えのファイルをプッシュできないエラーの対処法

※当サイトではアフィリエイト広告を利用しています

はじめに

GitHubにプッシュしようとした際に、以下のようなエラーが発生したことはありませんか?

remote: error: File database.db is 102.66 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.

このエラーは、GitHubのファイルサイズ制限(100MB)を超えたファイルが含まれている場合に発生します。

特にSourceTreeを使用している場合、GUIだけでは解決できないこともあります。

原因: GitHubのファイルサイズ制限

GitHubでは、以下の制限があります。

  • 100MBを超えるファイルはプッシュできない
  • 50MBを超えるファイルには警告が表示される

これに該当するファイルがリポジトリに含まれている場合、プッシュがブロックされます。

解決策1: Git LFSを使う(新規追加の大きなファイル向け)

Git Large File Storage(Git LFS)を利用することで、大きなファイルをGitHubに保存できます。手順は以下の通りです。

1. Git LFSをインストール

Git LFSが未インストールの場合は、以下のコマンドを実行してインストールします。

# Git LFSのインストール
git lfs install

2. 管理対象のファイルを指定

大きなファイル(例: database.db)をGit LFSで管理するように設定します。

git lfs track "database.db"

.gitattributes に以下の行が追加されるので、コミットしておきます。

git add .gitattributes
git commit -m "Add database.db to Git LFS"

3. ファイルをプッシュ

その後、通常の方法でコミット・プッシュすれば、Git LFS経由でアップロードできます。

git add database.db
git commit -m "Add large file with Git LFS"
git push origin main

解決策2: コミット済みの大きなファイルを削除する

すでにGitにコミット済みのファイルを削除するには、以下の方法を試してください。

方法1: git filter-branch で履歴から削除

  1. SourceTreeの「ターミナル」を開く
  2. 以下のコマンドを実行
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch database.db' --prune-empty --tag-name-filter cat -- --all
  1. ガベージコレクションを実行
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive
  1. 変更をSourceTreeで確認し、GitHubにプッシュ
git push origin --force --all

方法2: BFG Repo-Cleaner を使う

  1. BFG Repo-Cleaner をダウンロード
  2. SourceTreeの「ターミナル」を開き、リポジトリのディレクトリへ移動
  3. 以下のコマンドを実行
java -jar bfg.jar --delete-files database.db
  1. ガベージコレクションを実行
git reflog expire --expire=now --all
git gc --prune=now --aggressive
  1. 変更をプッシュ
git push origin --force --all

解決策3: .gitignore に追加して追跡をやめる

今後、誤って大きなファイルをコミットしないようにするため、.gitignore にファイルを追加しておきましょう。

database.db

その後、以下のコマンドを実行。

git rm --cached database.db
git commit -m "Remove large file from repository"
git push origin main

まとめ

状況対処方法
新規の大きなファイルをGitHubにプッシュしたいGit LFSを利用する
すでにコミット済みの大きなファイルを削除したいgit filter-branchまたはBFG Repo-Cleanerを利用する
今後大きなファイルを誤ってコミットしないようにしたい.gitignoreに追加する

GitHubの100MB制限を回避するには、適切な方法を選択して対処してください。

コメント