はじめに
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 で履歴から削除
- SourceTreeの「ターミナル」を開く
- 以下のコマンドを実行
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch database.db' --prune-empty --tag-name-filter cat -- --all
- ガベージコレクションを実行
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive
- 変更をSourceTreeで確認し、GitHubにプッシュ
git push origin --force --all
方法2: BFG Repo-Cleaner を使う
- BFG Repo-Cleaner をダウンロード
- SourceTreeの「ターミナル」を開き、リポジトリのディレクトリへ移動
- 以下のコマンドを実行
java -jar bfg.jar --delete-files database.db
- ガベージコレクションを実行
git reflog expire --expire=now --all
git gc --prune=now --aggressive
- 変更をプッシュ
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制限を回避するには、適切な方法を選択して対処してください。


コメント