2015-01-09 26 views
9

私は最近Bitbucketリポジトリのサイズ制限に遭遇しました。私はあなたのgit repoをきれいにする方法に答える無数の他の質問に続き、いくつかの悪いコミットを取り除くためにBFGを使い終わった。リモートgitリポジトリでゴミを掃除する方法

しかし、これはうまくいきましたが、gitカウントを実行した後には、ゴミに多量のスペースがあったことに気付きました。だから私は簡単なgit gcを走らせた。しかし、それはゴミを掃除するために何もしなかった。

いくつかの掘削後、私は次のコマンドが見つかりました:

git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 \ 
-c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "[email protected]" 

がこれを実行するには、ローカルをクリーンアップしているゴミにつながりました。しかし、私はまだ遠隔レポの問題があります。リモートのリポジトリでこのコマンドを実行するためにBitbucketを取得する必要がありますか、またはこの変更をリポジトリにプッシュする方法はありますか?

+2

私はbitbucketについて話すことはできませんが、一般的に、裸のクローンはreflogを保持しません。再データもありません。一般的には、リモコンのリファレンスを更新し、そこにGCをトリガする必要があります。 – torek

答えて

7

他の誰かがこれを体験している場合、答えは「はい」と判明しました。 1ギガバイトの下に、

bash-4.1$ git reflog expire --expire="1 hour" --all 
bash-4.1$ git reflog expire --expire-unreachable="1 hour" --all 
bash-4.1$ git prune --expire="1 hour" -v 
bash-4.1$ git gc --aggressive --prune="1 hour" 

前と2ギガバイト以上から減少したリモートレポサイズ後:

のBitbucketのサポートは、以下を実行しました。

14

今日、私たちは同じ問題を抱えており、Bitbucketサポートに以下のように連絡することなく、を解決することができたと思います。 このメソッドは、最後のコミットをrepoから破棄します。そのため、バックアップを取ることをお勧めします。

Bitbucketは、私たちのレポが約2.1GBであると報告しました。クローン作成時には、ローカルで約250MBしかかかりませんでした。これから、到達不能なコミットの大きなファイル(this answerのおかげで)の可能性が高いと判断しました。

これが到達不能確認する方法である私たちはREFLOG経由でアカウントの到達可能性に取らない場合は、ローカルにコミット:

ローカル

git fsck --unreachable --no-reflog

、到達不能コミットをして洗浄することができます:

git reflog expire --expire-unreachable="now" --all 
git prune --expire="now" -v 
git gc --aggressive --prune="now" 

Bitbucketではこれらのコマンドをリモートで実行することはできません。しかし、彼らはgit push -f続いgit reset --hard HEAD~1を(破棄が最後をコミットする)ことに反応してgit gc自分自身を実行することを(リポジトリの制限を削除セクションthe page about reducing repo sizeに言います。また、彼らはセクション、git gc --prune=nowgit push --all --forceを試すことができるのゴミ収集データで述べています。このすべてを考えると、私はそれがREFLOGを切り出し、ローカルにプルーンを行い、その後、それは、GCを開始したいするリモートのBitbucketリポジトリ、それらをプッシュするだろう期待して、ローカルで次のことをしようとすることを決めた:

git reflog expire --expire-unreachable="30m" --all 
git prune --expire="30m" -v 
git gc --prune="30m" 
git reset --hard HEAD~1 
git push -f 

これはうまくいった、レポサイズは直ちに2.1GBからca. 250MB。:)

expire/expire-unreachable/pruneのtimeパラメータは、今から測定した有効期限カットオフポイントを設定することに注意してください。だから"今"はすべてを期限切れ/枝刈りすることを意味し、 "30m"は過去30分間の変更を除いて意味します。

+0

'git reset -hard HEAD〜1'と' git push -f'トリックはゴミダストです、ありがとう! – Liam

+1

これはどのブランチでも機能しますか、またはマスターでリセットする必要がありますか? –

+0

魅力のように働く、ありがとう –

関連する問題