Git gc
Polecenie git gc
jest poleceniem przerwy technicznej repozytorium. „Gc” oznacza zbieranie śmieci (ang. garbage collection). Wykonanie polecenia git gc
dosłownie każe Git posprzątać bałagan, który powstał w bieżącym repozytorium. Zbieranie śmieci to pojęcie, które wywodzi się z interpretowanych języków programowania, które korzystają z dynamicznej alokacji pamięci. Zbieranie śmieci w językach interpretowanych służy do odzyskiwania pamięci, która stała się niedostępna dla programu wykonującego.
W repozytoriach Git gromadzą się różne rodzaje śmieci, takie jak osierocone lub niedostępne commity. Commity Git mogą stać się niedostępne podczas wykonywania poleceń zmieniających historię, takich jak git resets czy git rebase. W celu zachowania historii i uniknięcia utraty danych Git nie usunie odłączonych commitów. Odłączony commit nadal można wyewidencjonować, wybrać i zbadać przy użyciu polecenia git log
.
Oprócz czyszczenia odłączonych commitów git gc
wykona również kompresję przechowywanych obiektów Git, zwalniając cenne miejsce na dysku. Gdy Git zidentyfikuje grupę podobnych obiektów, skompresuje je do „pakietu”. Pakiety są jak pliki zip zawierające obiekty Git i są przechowywane w katalogu ./git/objects/pack
w repozytorium.
Jak działa polecenie git gc?
Przed wykonaniem polecenie git gc
najpierw sprawdza kilka wartości git config. Wartości te pomogą wyjaśnić pozostałe działania git gc
.
Konfiguracja polecenia git gc
gc.reflogExpire
Opcjonalna zmienna, która domyślnie wynosi 90 dni. Służy do określania, jak długo należy zachować rekordy w dzienniku odwołań gałęzi.
gc.reflogExpireUnreachable
Opcjonalna zmienna, która domyślnie wynosi 30 dni. Służy do ustawienia, jak długo mają być przechowywane niedostępne rekordy w dzienniku odwołań.
gc.aggressiveWindow
materiały pokrewne
Jak przenieść pełne repozytorium Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
Opcjonalna zmienna, która domyślnie wynosi 250. Kontroluje czas spędzany w fazie kompresji delta podczas pakowania obiektów, gdy polecenie git gc
jest wykonywane z opcją --aggressive
.
gc.aggressiveDepth
Opcjonalna zmienna, która domyślnie wynosi 50. Kontroluje głębokość kompresji git-repack
używanej podczas wykonywania polecenia git gc --aggresive
.
gc.pruneExpire
Opcjonalna zmienna, której domyślna wartość to „2 tygodnie”. Określa, jak długo niedostępny obiekt będzie przechowywany przed przycięciem.
gc.worktreePruneExpire
Opcjonalna zmienna, której domyślna wartość to „3 tygodnie”. Określa, jak długo nieaktualne drzewo robocze będzie przechowywane przed usunięciem.
Wykonanie polecenia git gc
Za kulisami git gc
faktycznie wykonuje pakiet kilku wewnętrznych podpoleceń, takich jak git prune, git repack
, git pack
czy git rerere
. Służą one na wysokim poziomie do identyfikacji obiektów Git, które znajdują się poza poziomami progowymi ustawionymi w konfiguracji polecenia git gc
. Po zidentyfikowaniu obiekty te są następnie kompresowane lub odpowiednio przycinane.
git gc — najlepsze praktyki i często zadawane pytania
Zbieranie śmieci jest uruchamiane automatycznie w przypadku kilku często używanych poleceń:
Częstotliwość, z jaką polecenie git gc
powinno być wykonywane ręcznie, zależy od poziomu aktywności repozytorium. W repozytorium z jednym programistą przesyłającym wyniki prac wykonywanie polecenia git gc
będzie konieczne znacznie rzadziej niż w często aktualizowanym repozytorium z wieloma użytkownikami.
Porównanie poleceń git gc i git prune
git gc
jest poleceniem nadrzędnym, a git prune
podrzędnym. git gc
wyzwala wewnętrznie git prune
. git prune
służy do usuwania obiektów Git, które zostały uznane za niedostępne przez konfigurację git gc
. Dowiedz się więcej o poleceniu git prune.
Czym jest opcja git gc aggressive?
Polecenie git gc
można wywołać z opcją --aggressive
wiersza poleceń. Opcja --aggressive
powoduje, że polecenie git gc
poświęca więcej czasu na optymalizację. Powoduje to dłuższy czas wykonywania polecenia git gc
, ale pozwala zaoszczędzić więcej miejsca na dysku po jego zakończeniu. Wyniki działania opcji --aggressive
są trwałe i muszą być uruchamiane tylko po dużej liczbie zmian w repozytorium.
Czy jest polecenie git gc auto?
Wariant polecenia git gc --auto
najpierw sprawdza, czy w repozytorium wymagane jest sprzątanie, zanim zostanie wykonane. Jeśli uzna, że sprzątanie nie jest potrzebne, zostaje zakończone bez wykonywania żadnych operacji. Niektóre polecenia Git niejawnie uruchamiają polecenie git gc --auto
po wykonaniu, aby usunąć wszystkie niepotrzebne obiekty, które utworzyły.
Przed wykonaniem polecenie git gc --auto
sprawdzi konfigurację git
pod kątem wartości progowych niepotrzebnych obiektów i rozmiaru pakietu po kompresji. Wartości te można ustawić za pomocą polecenia git config. Jeśli repozytorium przekroczy którykolwiek z progów sprzątania, polecenie git gc --auto
zostanie wykonane.
Rozpoczynanie pracy z poleceniem git gc
Prawdopodobnie już używasz git gc
, nie wiedząc o tym. Jak omówiono w sekcji najlepszych praktyk, polecenie to jest automatycznie wywoływane za pomocą często używanych poleceń. Jeśli chcesz je wywołać ręcznie, po prostu wykonaj git gc
. Zostaną wyświetlone dane wyjściowe informujące o wykonanych operacjach.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.