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