Git 2.51 wprowadza kluczowe ulepszenia wydajności i nowe funkcje

git 2.51

Po dwóch miesiącach intensywnej pracy społeczność programistów Git wprowadza wersję Git 2.51, aktualizacja, która Zawiera 506 zmian, w których brało udział 91 deweloperów, spośród których 21 po raz pierwszy wniosło swój wkład.

W tej wersji wprowadzono usprawnienia mające na celu zwiększenie wydajności i uproszczenie zarządzania repozytoriami, w tym optymalizację wydajności dla poleceń git-push i git-fetch, a także kilka zmian odnoszących się do nowej gałęzi 3.x.

Najważniejsze cechy Git 2.51

Jedną z najważniejszych cech Git 2.51 jest Optymalizacja poleceń git push i git fetch w repozytoriach zawierających dużą liczbę odniesień. Kluczem do tej poprawy jest aktualizacja wsadowa, który przetwarza wiele łączy w ramach pojedynczej transakcji, a nie pojedynczo.

Dzięki tej optymalizacji, Wersja reftable przewyższa teraz tradycyjną wersję plików.W testach z repozytoriami zawierającymi do 10 000 odniesień wydajność polecenia git fetch wzrosła 22x dla reftable i 1.25x dla plików, podczas gdy polecenie git push poprawiło się odpowiednio o 18x i 1.21x.

Kolejną ważną innowacją jest iWprowadzenie tzw. pakietów cruft, Zaprojektowany do przechowywania niedostępnych obiektów, które nie są powiązane z gałęziami ani tagami. Te obiekty, które wcześniej były rozproszone, teraz można nimi zarządzać w oddzielnych opakowaniachs, co ułatwia ich kontrolowanie i zmniejsza rozmiar indeksów wielopakietowych (MIDX).

z nowe ustawienie repack.MIDXMustContainCruft, Git unika uwzględniania tych obiektów w głównych indeksachTesty na GitHubie wykazały, że taka konfiguracja pozwoliła zmniejszyć rozmiar indeksu o 38%, przyspieszyć zapis o 35% i poprawić odczyt o 5%.

Nowe podejście do pakowania obiektów

El Polecenie git pack-objects zawiera opcję –path-walk, która wprowadza innowacyjną metodę aby zreorganizować pliki pakietów. Zamiast przetwarzać obiekty na podstawie ich haszy, Git może teraz iterować je na podstawie ścieżki dostępu, pakując te, które znajdują się w tej samej lokalizacji. Takie podejście eliminuje potrzebę wstępnego sortowania obiektów i skutkuje mniejszymi, wydajniejszymi plikami pakowania.

Również w tej wersji Ustandaryzowano nowy format wymiany stanów drzew roboczych i indeksów utworzonych za pomocą Git Stash.. Teraz można eksportować i importować skrytki tak jak gałęzie czy tagi, co ułatwia przenoszenie stanów z jednego systemu do drugiego.

Na przykład:

git stash export --to-ref refs/stashes/mi-stash git push origin refs/stashes/mi-stash git fetch origin '+refs/stashes/*:refs/stashes/*' git stash import refs/stashes/mi-stash

Ulepszenia klasycznych poleceń

Kilka Polecenia Git otrzymały odpowiednie aktualizacje:

  • git cat-file teraz raportuje brakujące obiekty i podmoduły, pokazując identyfikatory zamiast po prostu oznaczać je jako „brakujące”.
  • git log korzysta z optymalizacji filtra Bloom, co przyspiesza wyszukiwanie w przypadku wielu ścieżek plików.
  • Polecenia git switch i git restore, uważane od 2019 r. za eksperymentalne, zostały w końcu ustabilizowane jako nowoczesne alternatywy dla polecenia git checkout.
  • Polecenie git whatchanged, będące odpowiednikiem polecenia git log –raw, jest przestarzałe i zostanie usunięte w wersji Git 3.0.
  • git for-each-ref otrzymuje opcję –start-after, która razem z –count umożliwia paginację wyników.
  • Polecenia git merge i git pull zawierają teraz opcję –compact-summary, która zapewnia bardziej zwięzły format podsumowania.

Wsparcie C99 i nowe zasady dotyczące składek

Git nadal dostosowuje swój kod do charakterystyki standardu C99. Chociaż od 2021 r. wymagany jest kompatybilny kompilator, twórcy oprogramowania ostrożnie podchodzą do kwestii zachowania kompatybilności z kompilatorami, które implementują ten wymóg tylko częściowo.

Ponadto wprowadzono istotną zmianę w polityce składkowej: Poprawki można teraz przesyłać pod pseudonimem, decyzja zgodna z zasadami jądra Linux i zaprojektowana tak, aby zapewnić większą elastyczność współtwórcom.

Patrząc w przyszłość Git 3.0

El Zespół programistów zaktualizował również plan działania do wersji Git 3.0., gdzie wyróżniają się dwie kluczowe zmiany: domyślne użycie algorytmu SHA-256 jako identyfikatora obiektu oraz przyjęcie formatu reftable do przechowywania odniesień do gałęzi i tagów. Te ulepszenia mają na celu poprawę bezpieczeństwa i wydajności w coraz większych i bardziej złożonych repozytoriach.

źródło: https://lore.kernel.org