Zmniejsz rozmiar repozytorium git


290

Próbowałem znaleźć dobry samouczek na temat zmniejszania rozmiaru repozytorium, ale nie znalazłem. Jak zmniejszyć rozmiar repozytorium ... to około 10 MB, ale chodzi o to, że Heroku pozwala tylko na 50 MB i nie jestem blisko ukończenia tworzenia mojej aplikacji.

Dodałem już zwykłych podejrzanych (log, sprzedawca, dokument itp.) Do .gitignore. Chociaż ostatnio dodałem tylko .gitignore.

Jakieś sugestie?


1
Właśnie to zrobiłem i sprowadziłem go do 2,2 mb ... wielkie dzięki! Chociaż nie wydawało się to zmniejszać rozmiaru repozytorium na Heroku..hmm
— wysłano

11
Wciśnij za pomocą --force. Zastąpi zawartość, nawet jeśli nie było żadnych zmian (żadnych nowych zmian itp.)
— Marcin Gil

1
@MarcinGil - poniżej VonC stwierdza, że ​​potrzebujesz dostępu do serwera, aby wyczyścić zdalny serwer (jeśli poprawnie go parsuję).
— jww

1
Tylko komentarz, aby pomóc innym czytelnikom, jeśli nie wiedzą, co dodać do .gitignore, gitignore.io oferuje miłą usługę, która pomoże Ci skonfigurować dobry produkt w .gitignoreoparciu o środowisko programistyczne.
— Blairg23

Odpowiedzi:


352

git gc --aggressivejest jednym ze sposobów wymuszenia przeprowadzenia procesu przycinania (dla pewności:) git gc --aggressive --prune=now. Masz także inne polecenia do czyszczenia repozytorium. Nie zapominaj jednak, że czasami git gcsam może zwiększyć rozmiar repo !

Można go również użyć po filter-branch, aby zaznaczyć niektóre katalogi do usunięcia z historii (z dodatkowym zyskiem miejsca); patrz tutaj . Ale to oznacza, że ​​nikt nie korzysta z twojego publicznego repozytorium. filter-branchmoże przechowywać kopie zapasowe.git/refs/original celu umożliwienia czyszczenia katalogu.

Wreszcie, jak wspomniano w tym komentarzu i tym pytaniu ; czyszczenie reflogu może pomóc:

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

Jeszcze bardziej kompletnym i prawdopodobnie niebezpiecznym rozwiązaniem jest usunięcie nieużywanych obiektów z repozytorium git


W innym scenariuszu zobacz także stackoverflow.com/questions/1029969/…
— VonC

1
Uwaga do siebie: nie zapomnij zdalnych gałęzi: stackoverflow.com/questions/11255802/…
— VonC

1
Uwaga do siebie: nie zapomnij o zdalnych tagach
— saiyancoder

1
Oprócz zdalnych referencji, rejestrowanie jest kolejną rzeczą, która może powodować, że referencje, które próbujesz usunąć, zostaną zachowane. stackoverflow.com/q/27489761/1072626
— vossad01

1
@jww Potwierdzam, że jest to operacja wyłącznie lokalna. Nie ma to wpływu na rozmiar zdalnego repo. Aby zrobić to samo, potrzebujesz bezpośredniego dostępu do serwera tego zdalnego repozytorium.
— VonC

94

Dziękuję za twoje odpowiedzi. Oto co zrobiłem:

git gc
git gc --aggressive
git prune

To chyba załatwiło sprawę. Zacząłem od około 10,5 MB, a teraz to niewiele więcej niż 980 KB.


8
prunejest zawsze uruchamiany przez gc(domyślnie 2 tygodnie temu).
— Cas

117
Do tej pory możesz uruchomić wszystkie 3 za pomocą przycinaniagit gc --aggressive --prune=now
— rahul286,

1
Ale kiedy usunę repo, a następnie sklonuję je ponownie, rozmiar jest nadal duży. Jak sobie z tym poradzisz?
— cwtuan

2

W moim przypadku wypchnąłem kilka dużych (> 100 Mb) plików, a następnie przystąpiłem do ich usuwania. Ale wciąż były w historii mojego repozytorium, więc musiałem je również usunąć.

Jaka była sztuczka:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Następnie musisz naciskać na gałąź:

git push origin <your_branch_name> --force

bfg to narzędzie, które można zainstalować w systemie Linux i macOS za pomocą brew:

brew install bfg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.