我們認爲我們今天有同樣的問題,並能夠解決它沒有聯繫Bitbucket支持,如下所示。請注意,該方法會丟棄最後一次提交的回購 - 因此您可能希望擁有其備份。
Bitbucket報告說,我們的回購約爲2.1GB,而在克隆時,本地只需要約250MB。由此,我們得出結論:它很可能來自無法訪問的提交中的大文件(感謝this answer)。
這是怎麼看的可達當地承諾,在這裏我們不通過引用日誌考慮是否可達
git reflog expire --expire-unreachable="now" --all
git prune --expire="now" -v
git gc --aggressive --prune="now"
:
git fsck --unreachable --no-reflog
在本地,不可達的提交可以用清洗然而,我們不能在Bitbucket上遠程運行任何這些命令。但是,他們在the page about reducing repo size(部分刪除存儲庫限制)上說他們自己運行git gc
,以響應git reset --hard HEAD~1
(其中丟棄最後提交)後跟git push -f
。此外,他們說在部分垃圾收集死亡數據,你可以嘗試的序列:git reflog expire --expire=now --all
,git gc --prune=now
,git push --all --force
。考慮到這一切,我決定嘗試在本地以下,希望它會切出的引用日誌,做本地剪枝,然後將它們推送到遠程倉庫到位桶上,它會啓動一個GC:
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到約。 250MB。:)
請注意,過期/過期 - 不可到達/修剪的時間參數將從現在開始設置過期截止點測量。所以例如「now」意味着過期/修剪所有內容,「30m」意味着除了最近30分鐘內的更改。
我不能說bitbucket,但一般來說,裸露的克隆不會保留reflogs;也不會有任何數據。通常你只需要更新遙控器上的ref並在那裏觸發一個gc。 – torek 2015-01-09 19:35:50