Podczas hostowania Gita na Bitbucket obowiązuje sztywny limit 2 GB - jeśli zostanie przekroczony, masz dostęp tylko do odczytu do repozytorium. Aby temu zapobiec, możesz na przykład retrospektywnie usunąć duże foldery lub pliki ze swoich zatwierdzeń. Ale także w innych przypadkach (jeśli dane dostępowe weszły do historii lub node_modules wróciły do nadrzędnego) musisz retrospektywnie manipulować historią Gita, wbrew jego naturze.
Bitbucket napisał o tym szczegółowy artykuł . Aby przeprowadzić całą sprawę w sprawie, najpierw tworzymy nowe repozytorium:
Następnie klonujemy repozytorium do pustego folderu na komputerze lokalnym:
6ab7686fc508ce87c52b10bb5d01ee51
Teraz tworzymy dwa podfoldery z plikami o losowej zawartości:
6ab7686fc508ce87c52b10bb5d01ee51
Teraz naciskamy na mistrza:
6ab7686fc508ce87c52b10bb5d01ee51
Teraz prawie osiągnęliśmy twardy limit 2 GB na Bitbucket:
Możemy to również sprawdzić lokalnie (patrz „zestawienie rozmiarów”):
6ab7686fc508ce87c52b10bb5d01ee51
Teraz zadaniem jest retroaktywne usunięcie „foo” z repozytorium, aby zmniejszyć o połowę jego rozmiar. Aby to zrobić, najpierw edytujemy bieżący HEAD i zapisujemy folder w gitignore:
6ab7686fc508ce87c52b10bb5d01ee51
Na koniec usuwamy folder za pomocą narzędzia BFG Repo Cleaner (BFG wymaga aktualnego środowiska JRE w systemie jako wymagania systemowego):
6ab7686fc508ce87c52b10bb5d01ee51
Teraz możemy zobaczyć wynik lokalnie:
6ab7686fc508ce87c52b10bb5d01ee51
Ale w Bitbucket rozmiar repozytorium jeszcze się nie zmienił, ponieważ garbage collector nie został jeszcze wykonany zdalnie, a bitbucket nie wykonuje „git gc” przy każdym wypychaniu:
Potwierdza to również wsparcie:
Dlatego najlepiej jest wysłać prośbę bezpośrednio na adres support@bitbucket.org, aby ręcznie uruchomić „git gc” w repozytorium. Po krótkim czasie zajęło się to również wsparciem:
Jeśli „świeżo” przeniesiesz repozytorium na inny komputer, na dysku znajdzie się tylko 0,9 GB. Jeśli ktoś ma lokalnie dostępną wersję 1,8 GB, wystarczy „git pull”, po którym następuje „git gc”.