GitHubで大きなファイルをプッシュしてしまったときの対処法

IT・プログラミング

GitHubに誤って大きなファイルをプッシュしてしまうと、リポジトリの管理が煩雑になるだけでなく、GitHubのファイルサイズ制限(最大100MB)を超える場合はプッシュ自体が失敗することがあります。ここでは、大きなファイルをプッシュしてしまった場合の具体的な対処法を解説します。

1. ファイルがまだ追跡されていない場合

状況

git add を実行しておらず、git init をしただけ、または .gitignore を設定していない場合。

対処方法

  1. .gitignore ファイルを作成または編集して、大きなファイルやフォルダを追跡対象から除外します。
    bash
    # 例: .gitignore ファイルの内容
    /node_modules/
    /large_files/
    *.log
  2. Gitで追跡されていないか確認:
    bash
    git status
  3. その後、通常通りのコミットを行います。

2. ファイルがステージングされた状態の場合

状況

git add を実行してファイルがステージングされたが、まだコミットしていない場合。

対処方法

  1. ステージングから対象ファイルを削除します:
    bash
    git reset HEAD <ファイルパス>

    例:
    bash
    git reset HEAD large_file.zip

  2. .gitignore に追跡対象外の設定を追加します。

  3. 必要に応じて再度ステージングしてコミットします。

3. 大きなファイルがコミットされ、まだプッシュしていない場合

状況

git commit まで実行したが、リモートリポジトリ(GitHub)にはプッシュしていない場合。

対処方法

  1. コミット履歴から大きなファイルを削除します:
    bash
    git rm --cached <ファイルパス>

    例:
    bash
    git rm --cached large_file.zip

  2. 削除後、再度コミット:
    bash
    git commit --amend -m "Remove large file from history"

  3. .gitignore に大きなファイルを追加します。

4. 大きなファイルをプッシュしてしまった場合

状況

すでにGitHubにプッシュ済みで、大きなファイルを削除したい場合。

対処方法

リモートリポジトリの履歴を修正する必要があります。以下の方法を検討してください。

方法1: BFG Repo-Cleanerを使用する

BFG Repo-Cleaner は、大きなファイルを含むリポジトリを簡単に修正できるツールです。

  1. BFGをインストールします:
    bash
    brew install bfg # macOSの場合

    または、公式サイトからダウンロードします。

  2. リポジトリのバックアップを作成:
    bash
    git clone --mirror <リポジトリURL>
    cd <リポジトリ>.git

  3. 大きなファイルを削除:
    bash
    bfg --delete-files <ファイル名>

    または、特定サイズ以上のファイルを削除:
    bash
    bfg --strip-blobs-bigger-than 50M

  4. 修正内容をプッシュ:
    bash
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
    git push --force

方法2: Gitの公式フィルタリングツールを使用

Gitの filter-repo を使用して履歴を修正します。

  1. 必要なツールをインストール:
    bash
    pip install git-filter-repo

  2. 不要なファイルをリポジトリ履歴から削除:
    bash
    git filter-repo --path <ファイルパス> --invert-paths

  3. 修正内容をプッシュ:
    bash
    git push --force

5. Git LFSを使用する場合

もし大きなファイルをリポジトリに含める必要がある場合は、Git Large File Storage (Git LFS) を使用します。

  1. Git LFSをインストール:
    “`bash
    # macOS
    brew install git-lfs

# Ubuntu
sudo apt install git-lfs
“`

  1. Git LFSを有効化:
    bash
    git lfs install

  2. 大きなファイルをGit LFSで追跡:
    bash
    git lfs track "<ファイルパス>"
    git add .gitattributes
    git commit -m "Track large files with Git LFS"

  3. ファイルをプッシュ:
    bash
    git push origin main

まとめ

  • まだ追跡していない場合: .gitignore を設定して不要なファイルを除外。
  • コミット済みの場合: git rm --cached を使用してインデックスから削除。
  • プッシュ済みの場合: BFG Repo-Cleaner または git filter-repo で履歴を修正。
  • 必要な大きなファイル: Git LFSで管理。

参考リンク

タイトルとURLをコピーしました