0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データが重くてGitHubにpushできない時の対処法

Posted at

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リポジトリの履歴をクリーンアップするツールです。

インストール方法

  1. BFG Repo-CleanerのGitHubリポジトリにアクセスします。
  2. 最新版の .jar ファイルをダウンロードします。
    • 例: bfg-1.14.0.jar
  3. ダウンロードしたファイルを任意のフォルダに保存します。

必要条件

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のサイズ制限エラーに悩まされることなく作業を進められるはずです!

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?