Jak używać Git Shallow Clone do szybszego klonowania repozytorium

Jak używać Git Shallow Clone do szybszego klonowania repozytorium

Duże repozytoria Git mogą zużywać dużo zasobów i spowalniać komputer. Czasami można to złagodzić, stosując płytkie klonowanie, które odrzuca wszystkie zatwierdzenia oprócz najnowszych, co ułatwia pobieranie repozytoriów Git z długą historią.

Co to jest płytkie klonowanie?

Klonowanie repozytorium nie tylko tworzy kopię całego repozytorium, ale także jego pełną historię zatwierdzeń. W przypadku większości repozytoriów ogólny rozmiar i długość historii zatwierdzeń nie stanowi problemu. Jednak w przypadku naprawdę dużych repozytoriów klonowanie wszystkich tych danych może być czasochłonne i wymagać dużych zasobów.

Na przykład jądro Linuksa korzysta z tego samego repozytorium od zarania dziejów. Ma ponad 1,1 miliona zobowiązań. Klonowanie tego może zająć ponad godzinę na starszym sprzęcie i zużywać wiele gigabajtów pamięci RAM tylko na sam proces Git. Oczywiście nie każde repozytorium jest tak ogromne, ale niektóre są tego bliskie i nawet współtwórcy jądra Linuksa nie chcą siedzieć przy klawiaturze przez godzinę i oglądać klonowanie.

Płytkie klonowanie to technika, która pobiera tylko ograniczoną liczbę ostatnich zatwierdzeń. Skutkuje to lekkim i szybszym klonem, który nadal zachowuje funkcjonalność niezbędną do twojej pracy, ponieważ większość ludzi nie dba o starsze zatwierdzenia, a ty nadal możesz przesyłać PR i wprowadzać zmiany bez całej historii.

Ma to również ogromne korzyści dla potoków ciągłej integracji (CI/CD), ponieważ serwer kompilacji prawdopodobnie nie musi znać całej historii Git tylko po to, aby zbudować aplikację. Jeśli piszesz skrypty, które działają z repozytoriami Git i dbasz tylko o zawartość, warto zamiast tego użyć płytkiego klonowania.

Oprócz czasu klonowania, płytkie repozytoria generalnie działają szybciej, ponieważ podczas uruchamiania codziennych poleceń jest mniej historii do przetworzenia. Naprawdę długie historie mogą również powodować opóźnienia klientów GUI Git, co może zrujnować wrażenia.

Płytkie klonowanie repozytorium Git

Najłatwiejszym sposobem na płytkie klonowanie jest po prostu użycie --depthparametru na git clone. Spowoduje to ograniczenie klonowania do określonej liczby, na przykład 100 zatwierdzeń przed bieżącym repozytorium HEAD. Wszystkie inne starsze zatwierdzenia zostaną usunięte z historii.

git clone --depth 100 [repository_URL]

Możesz także sklonować wszystko po określonej dacie, co jest o wiele bardziej przydatne, jeśli nie wiesz, ile zatwierdzeń potrzebujesz.

git clone --shallow-since="3 months"[repository_URL]

Parametr daty może akceptować wiele różnych formatów , ale proste „X lat/miesięcy temu” generalnie działa dobrze.

Istnieją również metody spłycania istniejącego repozytorium Git , ale zwykle są one chaotyczne i obejmują przepisywanie historii oraz ręczne usuwanie wszystkich starych obiektów z pamięci podręcznej Git do wyrzucania elementów bezużytecznych. Zalecamy po prostu wypchnięcie wszystkich zmian, usunięcie starego repozytorium i ponowne sklonowanie z pilota, jeśli chcesz zmniejszyć rozmiar istniejącego repozytorium.

Płytkie klonowanie tylko jednej gałęzi

Płytkie klonowanie można połączyć z inną funkcją Git, która ogranicza klonowanie tylko do jednej gałęzi. Jeśli tylko pobierasz repozytorium, aby sprawdzić gałąź funkcji, możesz zamiast tego uruchomić to polecenie:

git clone --depth 100 [repository_URL] --single-branch --branch=[branch]

Bezplamowe i bezdrzewne klony

Inną podobną opcją, która nadal może zachować historię zatwierdzeń, jest użycie klonów bez blobów . W Git rzeczywista zawartość pliku jest przechowywana jako „bloby”, a Git dodaje do tych drzew i zatwierdza, które śledzą, w jaki sposób te obiekty łączą się ze sobą.

Kwadraty to kropelki, trójkąty to drzewa, a koła to skierowane do użytkownika zatwierdzenia, które wskazują na wszystko.

Ponieważ Git zajmuje się głównie zatwierdzeniami i strukturą drzewa, możesz pominąć obiekty blob i pobrać je na żądanie, gdy są potrzebne. Może to znacznie przyspieszyć czas klonowania przy jednoczesnym zachowaniu historii. Możesz także łączyć klony bez plam i płytkie.

Aby to zrobić, uruchom git clonez zestawem filtrów:

git clone --filter=blob:none [repository_URL]

Bezdrzewne klony są podobne i często używane do automatyzacji, ale zwykle nie są zalecane do codziennego użytku, ponieważ mogą być wolniejsze w codziennych operacjach Git.

git clone --filter=tree:0 [repository_URL]

Zwykle jednak płytkie klony będą nadal szybsze, a klony bez plam będą rosły z czasem, ponieważ trzeba będzie uzyskać dostęp do większej liczby części repozytorium.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *