Close

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
Bazy danych
materiały pokrewne

Jak przenieść pełne repozytorium Git

Logo Bitbucket
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ł

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.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up