Po trzech miesiącach prac rozwojowych opublikowano wersję rozproszonego systemu zarządzania kodem źródłowym Git 2.46. Git jest jednym z najpopularniejszych, niezawodnych i wydajnych systemów kontroli wersji, oferującym elastyczne narzędzia do nieliniowego rozwoju, oparte na rozgałęzianiu i scalaniu gałęzi. Aby zapewnić integralność historii i odporność na zmiany „wstecz”, stosuje się niejawne haszowanie całej wcześniejszej historii w każdym commicie, możliwe jest również potwierdzenie podpisami cyfrowymi deweloperów poszczególnych tagów i commitów. Kod Git jest dystrybuowany na licencji GPLv2+.
W porównaniu do poprzedniej wersji w nową wersję wprowadzono 746 zmian, które przygotowało 96 deweloperów, z których 31 bierze udział w rozwoju po raz pierwszy. Główne nowości:
- Dodano eksperymentalne wsparcie dla nowego rodzaju bitmap — „pseudo-merge reachability bitmap”, w których w przeciwieństwie do struktury „reachability bitmap” dane o zestawach obiektów związanych z commitami są przechowywane nie w odniesieniu do każdego pojedynczego commita, ale w odniesieniu od razu do kilku commitów. Taka organizacja pozwala na użycie jednej bitmapy przy określaniu obiektów dla commitów w różnych gałęziach, co w dużych repozytoriach pozwala uniknąć tworzenia dużej liczby oddzielnych bitmap i znacznie przyspiesza przeszukiwanie obiektów w celu określenia, które obiekty należy wysłać do klienta podczas wykonywania takich operacji jak „git fetch”, „git rev-list” i „git clone”. Aby włączyć nowy rodzaj bitmap i określić logikę ich wyboru i użycia, zaproponowano serię ustawień „bitmapPseudoMerge”: git config bitmapPseudoMerge.all.pattern ‘refs/(heads|tags)/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb
- Wprowadzono nowy interfejs linii poleceń dla polecenia „git config”, w którym zamiast rozproszonych opcji do wyświetlania, zmieniania i usuwania ustawień oraz sekcji, takich jak „—get”, „—get-all”, „—unset” i „—remove-section”, zaproponowano zestaw osobnych podpoleceń. Na przykład, aby wyświetlić wszystkie ustawienia repozytorium, można teraz użyć polecenia „git config list”, a do sprawdzenia zawartości określonego parametru — polecenia „git config get ”. Aby dodatkowo filtrować wyniki za pomocą opcji „—regexp”, można zdefiniować filtr oparty na wyrażeniu regularnym.
- Do protokołu „credential helper”, stosowanego do przesyłania danych uwierzytelniających podczas dostępu do repozytoriów z ograniczonym dostępem, dodano wsparcie dla nowych pól „authtype” i „credential”, umożliwiających tworzenie obsługiwaczy dla systemów HTTP uwierzytelniania, które nie ograniczają się do sprawdzania loginu i hasła, na przykład przy użyciu Bearer Token w OAuth 2.0. Wcześniej, aby pracować z takimi systemami uwierzytelniającymi, konieczne było podawanie danych poufnych w otwartej postaci w parametrze http.extraHeader. Ponadto, do protokołu dodano możliwość zapisywania stanu każdego obsługiwacza danych uwierzytelniających, aby wspierać metody wieloetapowego uwierzytelniania stosowane w takich protokołach jak NTLM i Kerberos.
- Kontynuowano rozwój eksperymentalnego backendu „reftable” do efektywnego przechowywania w repozytorium odnośników do gałęzi i tagów. Ten backend wykorzystuje magazyn blokowy, stosowany w projekcie JGit, i jest zoptymalizowany do przechowywania bardzo dużej liczby odnośników (tradycyjne formaty przechowywania odnośników prowadzą w repozytoriach z dużą liczbą odnośników do odczuwalnych kosztów związanych z umieszczaniem bardzo wielu plików w jednym katalogu w przypadku przechowywania odnośników w katalogu $GIT_DIR/refs lub konieczności nadpisania jednego dużego pliku przy każdym aktualizowaniu w przypadku przechowywania odnośników w pliku $GIT_DIR/packed_refs). W nowej wersji dodano polecenie „git refs migrate —ref-format=reftable” do przekształcania istniejących repozytoriów na backend „reftable” (wcześniej backend był włączany tylko podczas inicjalizacji repozytorium).
- Do zespołu git dodano opcję «—no-advice», która wyłącza wszystkie komunikaty z rekomendacjami i wskazówkami, co może okazać się przydatne, aby zapobiec przepełnieniu logu zbędnymi informacjami podczas automatycznego wywoływania git.
- Rozpoczął się proces przekształcania niektórych testów z zestawu testowego na wykorzystanie testów jednostkowych, co uprości testowanie niskopoziomowych komponentów i zwiększy efektywność procesu testowania na platformie Windows, na której występują wysokie koszty związane z uruchamianiem dużej liczby procesów podczas wykonywania testów, zrealizowanych w postaci skryptów powłoki.
- Do kodu do analizy ustawień kolorów dodano możliwość użycia formatu „#RGB” oprócz „#RRGGBB”.
Źródło: opennet.ru
