2014-12-15 14 views
6

Mam repozytorium z tylko jednym zatwierdzeniem, które ma wyewidencjonowany rozmiar 95M. Jednak nie mogę uzyskać rozmiaru folderu .git poniżej 213M. Jeśli jednak utworzę nowe repozytorium o tej samej zawartości pliku, otrzymam folder .git o rozmiarze tylko 38M.Dlaczego git nie zmniejszy jeszcze rozmiaru repozytorium?

Czy istnieje sposób, aby odbudować swoje obiekty w taki sposób, aby uzyskać rozmiar bardziej zgodny z figurą z tworzenia nowego repozytorium?

Próbowałem zarówno git gc --prune=now --aggressive i git repack -adf --window=250 --depth=250, aby zmniejszyć rozmiar repozytorium. Sprowadzili repozytorium z oryginalnego 220M.

Wyobrażam sobie, że git musi mieć gdzieś referencje, które uniemożliwiają odśmiecanie śmieci, ale nie wiem, gdzie byłyby. Usunąłem wszystkie piloty i gałęzie i nie widzę niczego innego niż mój obecny oddział pod „sędziowie”

$ ls -R .git/refs 
.git/refs/: 
heads tags 

.git/refs/heads: 
master 

.git/refs/tags: 

stworzyłem repozytorium z istniejącego jednego z dłuższą historią. Użyłem checkout --orphan, aby utworzyć nową bezpodstawną gałąź, a następnie zatwierdziłem, aby utworzyć nowe zatwierdzenie ze stanem repozytorium. Następnie usunąłem oryginalną gałąź i usunąłem piloty przed uruchomieniem gc.

$ git --version 
git version 1.9.4.msysgit.0 
+2

Wyczyść reflogi, prawdopodobnie tam, gdzie coś się ukrywa. – torek

+0

możliwy duplikat [Zmniejszenie rozmiaru repozytorium git] (http://stackoverflow.com/questions/2116778/reduce-git-repository-size) –

+0

@AndrewC To jest to, co próbowałem użyć i gdzie dostałem polecenie 'gc' powyżej, ale w tym czasie nie wspomniał o reflogu. – vossad01

Odpowiedz

5

Bieg:

git reflog expire --all --expire=now 
git gc --prune=now --aggressive 

przyniósł folder do 27m. Dzięki @torek za komentarz sugerujący czyszczenie reflogu!

Myślałem, że reflog nie był problemem, ponieważ gdybym miał git reflog zobaczyłem tylko jeden wpis, moje pojedyncze zatwierdzenie. W odpowiedzi na sugestię @ torek znalazłem How to remove unused objects from a git repository?, gdzie znalazłem polecenie do czyszczenia reflogu.

Powiązane problemy