web-dev-qa-db-ja.com

Bitbucketでgitレポサイズを減らす方法は?

私の問題の概要:Bitbucketのプライベートリポジトリの1つは、2つの既存のファイルに数百バイトの追加をプッシュした後、突然サイズが2倍以上になりました。レポジトリは現在2GBを超えているため、Bitbucketはそれを読み取り専用モードにしました。読み取り専用モードであるため、レポサイズを縮小する変更をプッシュできません。 (キャッチ22.)

詳細:私の会社は最近、Bitbucketでgitリポジトリのホスティングを開始しました。私が担当しているリポジトリの1つは約973MBのサイズで、1GBのソフト制限に不快なほど近かった。リポジトリサイズを縮小するために、Bitbucketドキュメントの記事の指示に従って リポジトリを2つに分割 し、約450MBのドキュメントとオンラインヘルプファイルを独自のリポジトリに移動しました。次に、具体的には、Bitbucketのドキュメント記事 リポジトリサイズの削減 および gitリポジトリの維持 の指示に従いました。

git count-objects -vHは約973MBのサイズパックを見せてくれました。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD docディレクトリを削除します(これは新しいリポジトリに移動したコンテンツです)。

参照とプルーンを期限切れにするために、次のコマンドを実行しました。

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --Prune=now

git count-objects -vHその後、881.1 MiBとdu -sh .git/objectsは882Mを返しました。 450MBを超えるとレポジトリサイズが90MB未満削減されることに失望しましたが、それでもBitbucketに変更をプッシュしました。

git Push --all --force
git Push --tags --force

リポジトリのBitbucketコピーの設定ページには、引き続き973MBのサイズが表示されていました。私はログアウトし、ブラウザを更新し、再度ログインしましたが、それは助けにはなりませんでした-レポのサイズは973MBのままでした。

今朝(上記の変更の3日後)2つの既存のファイルにいくつかのマイナーな追加を行い、ファイルのサイズを合計で1 KB未満に増やし、追加してローカルリポジトリにコミットし、変更をBitbucket。数分後、レポジトリのBitbucketページを見て、「このレポは2 GBの制限を超えており、読み取り専用モードです」という赤い警告バナーが表示されました。現在、設定ページには、リポジトリのサイズが2.3 GBであると表示されます。

Bitbucketによると、2つのファイルに追加された数百バイトのプッシュは、間違いなく過去3日間にリモートリポジトリで発生する唯一のアクティビティでした。そのプッシュは、レポのサイズが2倍を超えることはなかったかもしれませんが、2つのイベントは時間的に密接に相関していました。

git reflog showは何も返しません。

新しいコピーを別のディレクトリに複製してからgit count-objectsを実行すると、881.29 MiBのサイズパックが得られます。

ローカルリポジトリはCentOS 6.5システム上にあります。 gitバージョンは1.8.5.3です。

質問

  1. リポジトリから450MBのファイルを移動すると、ローカルリポジトリのサイズが90MBしか減らなかったのはなぜですか?
  2. わずかな削減でさえ、Bitbucketのリモートリポジトリにプッシュされなかったのはなぜですか?
  3. 地球上で、リモートリポジトリサイズは973MBから2.3GBにどのようにジャンプしましたか?
  4. どうすれば修正できますか? --forceフラグを使用してもリモートリポジトリにプッシュできません。プッシュすると、「conq:リポジトリは読み取り専用モード(2 GBのサイズ制限を超えています)。致命的:リモートリポジトリから読み取れませんでした。」というエラーメッセージが表示されます。
29
dgvid

Bitbucketテクニカルサポートに相談した後、次の質問に答えることができます。

  1. リポジトリから450MBのファイルを移動すると、ローカルリポジトリのサイズが90MBしか減らなかったのはなぜですか?歴史上の何かが見逃されました。私は正確には何もしませんが、filter-branchコマンドは何かを見逃しました。ユーティリティ BFG Repo-Cleaner を実行することで、リポジトリサイズを450MB削減することに成功しました。
  2. わずかな削減でもBitbucketのリモートリポジトリにプッシュされなかったのはなぜですか?それはできましたが、Bitbucketサポートはgit gcを実行する必要があります。 Bitbucketリクエストに連絡し、レポジトリでgit gcを実行するよう依頼することができます。
  3. 地球上で、リモートリポジトリサイズは973MBから2.3GBにどのようにジャンプしましたか?わからない。 Bitbucketのテクニカルサポートもこれに対する答えを持っていませんでした。
  4. どうすれば修正できますか? Bitbucketサポートにお問い合わせください。リポジトリを読み取り/書き込みモードに戻すことができるため、小さなリポジトリをプッシュし、最後にgit gcを実行できます。
25
dgvid

Bitbucketリポジトリサイズを減らす最も簡単な方法2GBの制限を超えている場合

  1. Bitbucketにブランチを作成する
  2. Bitbucketでそのブランチを削除します

これにより、Bitbucketがgit gcリポジトリ上。

30
slimeygecko

私が知っているように、それらの家族はす​​でに知っていますが、gitはファイルのバージョン履歴を保存するので、変更を加えてファイルをプッシュしてもリポジトリサイズは小さくなりません。

Bitbucket、GitHub、gitlabなどのレポジトリサイズを縮小する方法はまだいくつかあります。最良の方法は、別のブランチによって追跡されていない限り、ブランチによって記録されているファイルを永久に削除するため、ブランチを削除することです。ただし、そのブランチに最新のファイルが必要な場合があるため、次のことを行ってください。

  1. ローカルマシンで、複製リポジトリを作成します。 (バックアップ、情報を失うことはありません)
  2. 移動するブランチを削除するか、新しいバージョンを作成します。 --cachedを使用して、リモートブランチを削除できます。
  3. ブランチを更新する場合は、ファイルを新しいブランチにコピーしてプッシュできます。
  4. 新しいリモートリポジトリを作成する場合は、それも行うことができます。

ホストによっては、特別なコマンドを実行する必要があるかもしれませんが、これはほとんどの場合に機能するはずです。

0
gagarwa