リポジトリのサイズを減らす


Bitbucket Cloud のリポジトリには 2 GB のサイズ制限があります。この制限に到達するとリポジトリは読み取り専用モードになり、ユーザーは過去のコミットのみプッシュでき、新しいコミットをプッシュすることはできなくなります。

1 GB のソフト制限を超えた場合や、リポジトリのサイズを削減する方法だけをお探しの場合、このドキュメントの「Bitbucket リポジトリのメンテナンス」をご参照ください。

リポジトリ制限を取り除く

次の操作により、リポジトリのプッシュ制限を取り除くことができます。ただし、問題を完全に解決するには、このドキュメントの「Git リポジトリのメンテナンスとクリーン アップ」のプロセスに引き続き従う必要があります。

はじめる前に

  • リポジトリのバックアップ - バックアップ方法の 1 つとして、--mirror フラグを使用してリポジトリをクローンし、クローン全体を zip 化できます。

  • チームまたはリポジトリのコラボレータやフォロワーに、リポジトリのメンテナンスについて伝えます。

  1. git pull --all コマンドを使用して Bitbucket からリポジトリの最新バージョンをプルします。リポジトリをバックアップするようにします。

  2. git reset --hard HEAD~N を使用して、リポジトリ履歴の HEAD をリセットします。この場合、 N は HEAD 位置を戻すコミット数です。次の例では、HEAD が 1 コミット戻され、リポジトリ履歴の最後のコミットにセットされます。最後にプッシュされたコミットがリポジトリの 2 GB のサイズ制限を超過させるものであった場合が多いため、これはもっとも頻繁に使用されるアプローチです。

このように HEAD をリセットし、次のステップで変更を強制的にプッシュすることにより、コミット(複数可)内のすべての変更が完全に削除されます。これは破壊的な操作なので、先​​に進む前に、追加したファイルはすべてバックアップします。

git reset --hard HEAD~1

3. 強制的に変更をプッシュするために git push --force を使用して Bitbucket に変更をプッシュします。

git push --force

4. 変更をプッシュしたら、サーバーでの git gc の実行をサポートに依頼します。これは git のガベージ コレクションで、リポジトリ サイズの変更を反映するために履歴の書き換えを行います。git gc の詳細については Git gc のチュートリアルをご参照ください。

Bitbucket リポジトリのメンテナンス

リポジトリが 2 GB の制限を再び超過しないよう、または、リポジトリのサイズの削減やメンテナンスのため、リポジトリでメンテナンス サイクルを完了します。

Bitbucket リポジトリ制限

すべてのユーザーに最善かつ最速のサービスを提供するため、リポジトリを次のサイズに制限しています。

  • ソフト制限 1 GB: この時点で、効果的に動作するリポジトリのサイズ上限に達しつつあることを知らせます。ハード制限に達しないようにメンテナンスを実行することをおすすめします。

  • ハード制限 2 GB: これは実質的にリポジトリ サイズのストップサインで、リポジトリのサイズを縮小するまで、実行可能な操作を制限します。

Bitbucket リポジトリのサイズの確認

Bitbucket 内

Bitbucket でリポジトリの相対サイズを確認するには、リポジトリの左側にあるメニューで [設定] をクリックして [リポジトリ詳細] ページを開き、リポジトリ名の下に表示される [サイズ] 行を見つけます。

理想的には、リポジトリ サイズを 100 MB と 300 MB の間に維持することをおすすめします。例をあげると、Git 自体は 222 MB、Mercurial 自体は 64 MB、Apacheは 225 MB です。これらのオープンソースのリポジトリは次のサイトで確認できます。 https://bitbucket.org/mirror/

コマンド ラインから

コマンド ラインを使用して、ローカル システム上のリポジトリのサイズを調べることもできます。

Git の場合、次のコマンドを使用します。git count-objects -vH

これは次のような結果を返します。

$ git count-objects -v 
count: 0
size: 0
in-pack: 478
packs: 1
size-pack: 92
prune-packable: 0
garbage: 0

size-pack 値はリポジトリが Bitbucket などのリモート サーバーにプッシュされたときのサイズです。size-pack 値はキロバイト単位です。 したがって、上記の例のリポジトリは 1 MB もありません。

Git リポジトリのメンテナンスとクリーン アップ

リポジトリをクリーン アップするためのもっとも一般的かつ推奨される方法の 1 つとして、BFG Repo-Cleaner の使用があります。BFG Repo-Cleaner は大規模ファイルやパスワードなどの不要なデータを Git リポジトリから削除することを目的に設計されたツールで、(現在のコミットに含まれない) 大きなサイズの任意の履歴ファイルを簡単に削除できる "--strip-blobs-bigger-than" フラグを備えています。

履歴を書き換えると、コミット ID が変更される点にご注意ください。その結果、変更された ID のコミットを参照するプル リクエストは、それらのコミットとコメントに関する情報を失います。

プル リクエストの履歴を保持したい場合は、リポジトリのクリーン バージョンを、既存のリポジトリではなく新しく作成したリポジトリにプッシュすることをお勧めします。

  1. BFG をインストールします。

  2. リポジトリに移動します。cd repository_name

  3. 大規模なファイルを削除したいブラウザに変更します。git checkout master

  4. ブランチに大規模なファイルが存在する場合、それを削除するコミットを作成します。

    git rm path/to/large_file.mpg
     git commit -m 'Remove large file'

5. 履歴を書き換えます。bfg --delete-files path/to/big_file.mpg

不要データのガベージ コレクト

  1. 1 つのブランチのみを明示して作業している場合を除き、このポイントからのすべての無効な reflog 参照を削除し、リポジトリを再パックします。次のコマンドを実行します。git -c gc.auto=1 -c gc.autodetach=false -c gc.autopacklimit=1 -c gc.garbageexpire=now -c gc.reflogexpireunreachable=now gc --prune=all

  2. すべての変更を Bitbucket リポジトリにプッシュして戻します。git push --all --force && git push --tags --force

変更をプッシュしたら、サーバーでの git gc の実行をサポートに依頼します。これはリポジトリのメンテナンスを行う git ガベージ コレクションで、リポジトリ サイズの変更を反映します。

クリーン アップやリポジトリ サイズのメンテナンスのためのその他の方法

git filter-branch を使用した履歴の書き換え

git filter-branch を使用したリポジトリ履歴の書き換えの詳細情報や手順については「Git Tools - Rewriting History」をご参照ください。

ファイル削除によるリポジトリ サイズの維持

未使用のファイルの削除は、リポジトリのサイズを縮小するための優れた方法です。ファイルを削除しても履歴から削除されませんが、リポジトリの現在のバージョンが縮小されます。古いファイルを取得する必要がある場合、各クローン​にそのファイルが残っています。削除するべきファイルとして、次の項目を検討します。

  • SQL ダンプ

  • 大規模なメディア資産

  • アプリケーションのコンパイル済みバージョン

  • サードパーティ製のライブラリと依存性 (jar、dll、gem など)

  • 履歴内の完全に不要な大規模ファイル

バイナリ ファイルは常に削除候補となります。DVCS システムは、バイナリ ファイルを格納するのに適しているとは言えません。Drive、Dropbox、Carbonite などのファイル ホスティング サービスにファイルをホスティングすることを検討することをおすすめします。

リポジトリをプロジェクト リポジトリに分割

コード プロジェクトごとにリポジトリを分割することにより、リポジトリのサイズを縮小できます。これには、プロジェクト間の相互参照状況を理解しておく必要があります。たとえば、大規模リポジトリ内に相互参照がない 4 つのプロジェクトがある場合、これを 4 つの小規模なリポジトリに分割できます。

リポジトリを分割する手順については、「リポジトリを 2 つに分割する」 を参照してください。

最終更新日 2019 年 5 月 20 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.