Git 2.31 dostępny z konserwacją w tle
Projekt open source – Git wydał kolejną wersję swojego oprogramowania Git 2.31. Wśród nowych funkcji jest git maintenance (konserwacja w tle). Pracownicy pracowali także nad poprawą wydajności projektu.
Git 2.31 prezentuje git maintenance
Git podczas normalnego użytkowania zapisuje wiele danych, takich jak obiekty, referencje czy pliki pakietów. Jednak czasami są one zoptymalizowane pod kątem zapisu, dzięki czemu szybciej będzie zapisany pojedynczy, luźny obiekt, a cały packfile szybciej się wczyta. Kompromis wprowadzony przez Git polega na optymalizacji ścieżki zapisu podczas pracy. Co jakiś czas zapis jest wstrzymywany, a Git przedstawia wewnętrzne struktury danych. Daje to lepszą produktywność, przez efektywniejszą prezentację tych danych do odczytu.
Czasami jednak heurystyka wskazująca najlepszy moment na wstrzymanie zapisu, stosowana przez Git, pokazuje blokujący git gc w nieodpowiednim momencie. Dlatego najnowsza wersja Git wprowadza konserwację w tle (background maintenance). Pozwala ona systemowi utrzymywać repozytorium w dobrym stanie, bez blokowania interakcji. Konserwacja w tle poprawi czasy wykonywania git fetch, przez pobieranie z wyprzedzeniem najnowszych obiektów ze zdalnych repozytoriów raz na godzinę. Tak samo często Git będzie aktualizował commit-graph, porządkując także swoje dane.
Dyskowe indeksy zwrotne
Kolejną zmianą w tym wydaniu jest możliwość serializacji indeksu wstecznego do nowego formatu z rozszerzeniem .rev.
Wszystkie dane w Git są przechowywane jako obiekty – commity, drzewa czy bloby. Następnie oprogramowanie umieszcza je w plikach packfiles, jako połączony strumień obiektów. Każdy z tych plików otrzymuje specjalnie wygenerowany indeks, który pozwala na szybką konwersję identyfikatora obiektu na jego offset bajtowy. Inaczej to działa w odwrotnym kierunku. Git korzysta z mapowania reverse index, aby określić obiekt, którego po bajcie szuka w packfile. Dotychczas taki format na dysku dla zwrotnych indeksów nie był dostępny, więc Git generował i przechowywał indeks odwrotny w pamięci. W przypadku dużych plików w repozytoriach taka czynność wymagała sporej ilości czasu.
Dzięki wprowadzonym dyskowym indeksom zwrotnym użytkownik otrzymuje wydrukowaną zawartość obiektu znacznie szybciej, co zwiększa wydajność pracy programu. Przede wszystkim indeksy zwrotne mogą być potrzebne przy wysyłaniu bajtów obiektu bezpośrednio z dysku podczas wysyłania obiektów do pobrania.
Pozostałe zmiany w Git 2.31
Git wprowadził także zmiany w pliku commit-graph. Skorzystano z nowego rodzaju numeru generacji, dzięki któremu w niektórych przypadkach poprawi się wydajność. Innym ulepszeniem w wersji 2.31 jest opcja –disk-usage, która działa szybciej niż korzystanie z istniejących narzędzi do sumowania rozmiarów obiektów. Wszystkie zmiany w Git 2.31 opisane są w repozytorium.
Źródło: GitHub Blog