Bitbucket:「Repository is over the size limit (4 GB) and will not accept further additions」
Bitbucket Cloud のリポジトリが 4 GB を超えたので、Bitbucket は直前のコミットを取り消す push しか受け付けません。新しいコミットは Bitbucket に届いていません。上限を超えさせた push を取り消してから、大きいファイルを外して push し直します。
メッセージの全体
Atlassian の記事 Reduce repository size にある形:
remote: Repository is over the size limit (4 GB) and will not accept further additions. remote: remote: Learn how to reduce your repository size: https://confluence.atlassian.com/x/xgMvEw. ! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to 'https://bitbucket.org/<ワークスペース>/<リポジトリ>.git'
4 GB を超えさせた push 自体は通っています。このメッセージは、その次の push で出ます。
どの上限か
- リポジトリごとに 4 GB(Standard・Premium)。直前のコミットを取り消す push 以外は、上のメッセージで断られます。
- リポジトリごとに 2 GB:Repository details の欄に警告が出るだけです。Atlassian はこれより小さく保つよう勧めています。
- 無料(Free)のワークスペースは合計 1 GB:ワークスペースのリポジトリ全部の合計です。2025年5月29日から、超えた無料のワークスペースは読み取り専用になります。使っている量は Workspace settings → Plan details → Workspace storage used で見られます。Standard と Premium のワークスペースには、この上限はありません。Git LFS のファイルはこれに入らず、別の保存領域(Free は1 GB)を使います(「out of file storage」)。
- ファイルごとに 100 MB:リポジトリの設定 Block pushes with files over 100 MB(既定で有効)が、そのようなファイルを足す push を断ります。ワークスペースかリポジトリの管理者が止められます(Repository settings → Repository details → Advanced)。
- 「remote: fatal: pack exceeds maximum allowed size」:1回の push で一度に送る量が多すぎます。作業を小さいコミットに分けて1つずつ push するか、大きいファイルを Git LFS に移します。
作業を残したまま、直前の push を取り消す
# 1. 手元のコミットを一時的なブランチに残す
git branch keeper
# 2. Bitbucket が受け取った最後のコミットの1つ前へ戻る
git reset --soft @{u}^
# 3. それを push して、Bitbucket のブランチを書き換える
git push --force
# 4. 手元のコミットを戻す
git merge --ff-only keeper
git branch -d keeper
これは Atlassian の記事にあるコマンドです。上限を超えた Bitbucket と同じく、ブランチを巻き戻す push しか受け付けない手元の git サーバーで実際に動かしました。その断りは上のメッセージと同じ形でした。3 のあと、サーバーのブランチは大きいコミットの1つ前で止まりました。4 のあと、手元のブランチは元の位置に戻り(大きいファイルも含めて)、サーバーより2コミット先にありました。
@{u}^で取り消せるのは1コミットです。直前の push に複数のコミットがあったなら、@{u}~2・@{u}~3のようにするか、それらの1つ前のコミットのハッシュを使います。- そのブランチで作業している人全員に知らせます:そのコミットは Bitbucket から消えたので、誰もマージし直さないように。
- ブランチに制限があるなら、3 の force push には Allow rewriting branch history が要ります。無いと 「pre-receive hook declined」で断られます。
そのあと Bitbucket が自分でガベージコレクションを走らせ、push がまた通るようになります。大きいファイルを外してもリポジトリが大きいままなら、上限の 75% を超えているときは Bitbucket がもう一度走らせます。それでも減らなければ、Atlassian のサポートに走らせてもらいます。
大きいファイルを外して、作業を push し直す
まだ push しません。手元のブランチの履歴には、まだ大きいファイルがあります。それが Bitbucket に無いコミットにしか入っていないなら、そのコミットを、大きいファイル抜きの1つのコミットにまとめます:
git reset --soft @{u}
git rm --cached path/to/large-file
echo "path/to/large-file" >> .gitignore
git add .gitignore
git commit -m "メッセージ"
git push
同じ手元のサーバーで上限を外して試すと、大きいファイル抜きの1つのコミットが push され、ファイルはディスクに残りました。大きいファイルがもっと前のコミットにあり、Bitbucket にも載っているなら、履歴を書き換える必要があります。Atlassian の Maintain a Git repository と Use BFG to migrate a repo to Git LFS を見てください。書き換えたあとは全員がクローンし直します。古いクローンから force push すると、大きいファイルが戻ってきます。
IntelliJ IDEA から Bitbucket のプルリクエストを作るなら
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud と Data Center で、Git メニューに Bitbucket のプルリクエストを作成… を足します。今いるブランチから、選ばなければリポジトリのメインのブランチへ、プルリクエストを作ります。ブランチがまだ Bitbucket に無ければそう伝えて、先に IDE の push の画面を開きます。プルリクエストの作成・承認・マージは Pro(月 US$1.50・30日間の無料試用つき)、受信箱は無料です。画面は日本語です。
Bitbucket と Atlassian は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:人数の上限の「Your push failed because the account has exceeded its user limit」 · ブランチの制限の「pre-receive hook declined」 · IntelliJ IDEA の Bitbucket プルリク用プラグインの比較 · LFS の「out of file storage」 · English