GitHubでの大きなファイルのpushエラーを解決する方法
何が起こったのか
単純にGitHubへのpushする時の容量が重すぎて拒否されたという体験をしたので何とか対処できないかAIやサイトを見てやっていった結果をここに記していきました。
問題の背景
GitHubでは、100MBを超えるファイルは通常のGitで扱えず、pushが拒否されます。この際、以下のようなエラーが発生します:
remote: error: File <filename> is <size>; 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.
! [remote rejected] main -> main (pre-receive hook declined)
このエラーを解決するには、**Git LFS(Large File Storage)**を利用し、大きなファイルをGitHubの制限に合った形で管理する必要があります。
しかし、既存のリポジトリに大きなファイルが含まれている場合、そのファイルを過去の履歴から削除しなければpushできません。この解決方法として、BFG Repo-Cleanerを利用します。
解決方法のステップ
1. Git LFSのインストールと設定
まず、Git LFSをインストールし、有効化します。
Git LFSのインストール
-
Mac:
brew install git-lfs
-
Windows:
Git LFS公式サイトからインストーラーをダウンロードし、インストールします。 -
Linux:
sudo apt install git-lfs
Git LFSの有効化
リポジトリでGit LFSを有効化します。
git lfs install
これにより、Git LFSがリポジトリ内で使用可能になります。
2. BFG Repo-Cleanerのインストール
BFG Repo-Cleanerは、Gitリポジトリの履歴をクリーンアップするツールです。
インストール方法
- BFG Repo-CleanerのGitHubリポジトリにアクセスします。
- 最新版の
.jar
ファイルをダウンロードします。- 例:
bfg-1.14.0.jar
- 例:
- ダウンロードしたファイルを任意のフォルダに保存します。
必要条件
BFGはJavaで動作します。以下のコマンドでJavaがインストールされていることを確認してください。
java -version
Javaがインストールされていない場合は、Javaの公式サイトからJDKをインストールしてください。
3. 大きなファイルをリポジトリ履歴から削除
BFGを使って、大きなファイルをリポジトリ履歴から削除します。
コマンドの実行
以下のコマンドを使用します。<path/to/bfg.jar>
をBFGの実際の保存場所に置き換えてください。
java -jar <path/to/bfg.jar> --delete-files "<filename>"
例: 特定の大きなファイル large_file.pyd
を削除する場合:
java -jar C:\tools\bfg.jar --delete-files "large_file.pyd"
4. Gitの履歴を整理
BFG実行後、以下のコマンドで不要なオブジェクトをクリーンアップします。
git reflog expire --expire=now --all
git gc --prune=now --aggressive
これにより、リポジトリのサイズが縮小し、不要な履歴が削除されます。
5. Git LFSで大きなファイルを再追跡
大きなファイルをGit LFSで追跡し直します。
git lfs track "<filename>"
git add .gitattributes
git add "<filename>"
git commit -m "Track large file with Git LFS"
6. リモートにpush
BFGで履歴を修正したリポジトリは、リモートリポジトリと異なる状態になります。そのため、--force
オプションを使って強制的にpushします。
git push origin main --force
その後、Git LFSで再追跡したファイルをリモートに追加します。
git push origin main
注意点
- BFGの利用は不可逆的です:変更後は元の履歴に戻せないため、実行前にバックアップを取っておくことを強くお勧めします。
- BFG実行後は、他のコラボレーターにもリポジトリを再クローンしてもらう必要があります。
まとめ
GitHubでのファイルサイズ制限を回避するには、Git LFSとBFG Repo-Cleanerを組み合わせて使用するのが効果的です。大きなファイルを含む履歴を削除し、LFSで正しく管理することで、リポジトリをクリーンで使いやすく保つことができます。
これで、GitHubのサイズ制限エラーに悩まされることなく作業を進められるはずです!