正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

リポジトリのサイズを削減する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

Gitリポジトリのサイズは、パフォーマンスとストレージコストに大きく影響する可能性があります。圧縮、ハウスキーピング、その他の要因により、インスタンスごとに若干異なる場合があります。

リポジトリサイズの詳細については、以下を参照してください:

リポジトリの履歴からファイルをパージ

この方法は、Gitの履歴全体から大きなファイルを削除するために使用します。

パスワードやキーなどの機密データをリポジトリから削除するのには適していません。ファイルの内容を含むコミットに関する情報はデータベースにキャッシュされ、リポジトリから削除された後も表示されたままになります。機密データを削除するには、blobを削除で説明されている方法を使用してください。

前提条件:

  • git filter-repoをインストールする必要があります。
  • オプション。git-sizerをインストールします。

ファイルのパージは破壊的な操作です。続行する前に、リポジトリのバックアップがあることを確認してください。

GitLabリポジトリからファイルをパージするには:

  1. リポジトリのコピーを含むプロジェクトをエクスポートすると、ダウンロードされます。

  2. バックアップを解凍して抽出します:

    tar xzf project-backup.tar.gz
  3. --bareおよび--mirrorオプションを使用して、リポジトリをクローンします:

    git clone --bare --mirror /path/to/project.bundle
  4. project.gitディレクトリに移動します:

    cd project.git
  5. リモートURLを更新します:

    git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git
  6. git filter-repoまたはgit-sizerを使用してリポジトリを分析します:

    • git filter-repo:

      git filter-repo --analyze
      head filter-repo/analysis/*-{all,deleted}-sizes.txt
    • git-sizer:

      git-sizer
  7. 次のgit filter-repoオプションのいずれかを使用して、リポジトリの履歴をパージします:

    • 特定のファイルをパージするには、--path--invert-pathsを使用します:

      git filter-repo --path path/to/file.ext --invert-paths
    • たとえば10Mより大きいすべてのファイルをパージするには、--strip-blobs-bigger-thanを使用します:

      git filter-repo --strip-blobs-bigger-than 10M

    詳細については、git filter-repoのドキュメントを参照してください。

  8. commit-mapをバックアップします:

    cp filter-repo/commit-map ./_filter_repo_commit_map_$(date +%s)
  9. ミラーフラグを解除します:

     git config --unset remote.origin.mirror
  10. 強制プッシュで変更をプッシュします:

    git push origin --force 'refs/heads/*'
    git push origin --force 'refs/tags/*'
    git push origin --force 'refs/replace/*'

    参照の詳細については、Gitalyで使用されるGit参照を参照してください。

    この手順は、保護ブランチ保護タグの場合は失敗します。続行するには、一時的に保護を削除します

  11. 次の手順に進む前に、少なくとも30分待ちます。

  12. リポジトリのクリーンアッププロセスを実行します。このプロセスでは、30分以上経過したオブジェクトのみがクリーンアップされます。詳細については、クリーンアップ後にスペースが解放されないを参照してください。