Wydanie systemu kontroli wersji Git 2.52

Po trzech miesiącach prac rozwojowych zaprezentowano wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.52. Git wyróżnia się wysoką wydajnością i zapewnia narzędzia do nieliniowego rozwoju, oparte na gałęzieniu i scalaniu. Aby zapewnić integralność historii i odporność na zmiany „wstecz”, stosuje się niejawne haszowanie całej poprzedniej historii w każdym zatwierdzeniu, a także potwierdzenia cyfrowymi podpisami deweloperów poszczególnych tagów i zatwierdzeń. Kod Git jest rozpowszechniany na licencji GPLv2+.

W porównaniu z poprzednim wydaniem, w nowej wersji przyjęto 637 zmian, przygotowanych przy udziale 94 deweloperów (33 z nich po raz pierwszy wzięło udział w pracach nad Gitem). Główne nowości (1, 2, 3):

  • Dodano polecenie „git last-modified” do wyświetlania listy plików w podanej rewizji oraz zatwierdzeń, przez które wprowadzono ostatnie zmiany w każdym z tych plików. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
  • Dodano polecenie „git repo” do wykonywania czynności związanych z pobieraniem informacji z repozytorium. Zaproponowano dwa podpolecenia — „git repo info” oraz „git repo structure”, które wyświetlają informacje o ustawieniach repozytorium oraz szczegóły dotyczące struktury repozytorium (na przykład można sprawdzić liczbę odniesień i obiektów w repozytorium). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Struktura repozytorium | Wartość | | ——————— | —— | | * Odniesienia | | | * Liczba | 1983 | | * Gałęzie | 4 | | * Tagi | 1125 | | * Zdalne | 854 | | * Inne | 0 | | | | | * Obiekty osiągalne | | | * Liczba | 518955 | | * Zatwierdzenia | 77469 | | * Drzewa | 188865 | | * Bloby | 251631 | | * Tagi | 990 |
  • Do polecenia „git refs” dodano trzy podpolecenia, które ujednolicają roz proszone i pokrywające się niskopoziomowe operacje na referencjach (git for-each-ref, git show-ref, git update-ref i git pack-refs):
    • „git refs optimize” — optymalizacja backendu przechowywania referencji (analogicznie do „git pack-refs”).
    • „git refs list” — wyświetlanie listy wszystkich referencji (analogicznie do „git for-each-ref” lub „git show-ref”).
    • „git refs exists” — sprawdzanie istnienia referencji (odpowiednik „git show-ref —exists”).
  • Format eksportu lub importu historii commitów został rozszerzony o możliwość pracy z podpisami kryptograficznymi, używającymi zarówno identyfikatorów obiektów opartych na algorytmie SHA-1, jak i na SHA-256. W poleceniu 'git fast-import' wprowadzono wsparcie dla obsługi podpisanych tagów na wzór podpisanych commitów. Dodano opcje '--signed-commits=' oraz '--signed-tags=' do zarządzania obsługą podpisanych commitów i tagów na etapie importu (tryb może przyjmować wartości verbatim, warn-verbatim, warn-stri, strip lub abort).
  • Do polecenia 'git maintenance' dodano wsparcie dla nowej strategii 'geometric' ('git config set maintenance.strategy geometric'), która pozwala na skrócenie czasu konserwacji dużych monorepozytoriów. W porównaniu do wcześniej dostępnej strategii, korzystającej z logiki używanej w poleceniu 'git gc', nowa strategia unika ponownego pakowania wszystkich obiektów i wyklucza nadmiernie zasobożerne operacje, takie jak łączenie wszystkich plików pakietów (jeżeli to możliwe, łączenie wykonywane jest partiami i bez czyszczenia usuniętych obiektów).
  • Dodano polecenie 'git sparse-checkout clean' w celu uproszczenia przywracania stanu katalogu roboczego, poprzez usuwanie plików, które nie odpowiadają nowej definicji sparse-checkout, a które nie powinny znajdować się w lokalnej kopii zgodnie z aktualnymi parametrami sparse-checkout.
  • Aby uprościć kod bazowy i ułatwić utrzymanie, dokonano refaktoryzacji w celu zmniejszenia użycia zmiennej globalnej the_repository.
  • Rozszerzono zastosowanie filtrów Bloom, struktury probabilistycznej do sprawdzania przynależności do zbioru, która dopuszcza fałszywe określenie brakującego elementu, ale wyklucza pominięcie istniejącego elementu. Filtry Bloom są teraz stosowane do przyspieszenia wyszukiwania w historii zmian przy wskazywaniu masek w ścieżkach plików, na przykład 'foo/bar/*/baz'.
  • Wydajność polecenia 'git describe' zwiększono o 30% dzięki zastosowaniu kolejek priorytetowych. W 'git remote rename' przyspieszono operacje zmiany nazw odnośników. W 'git ls-files' rozszerzono zastosowanie indeksów. Zauważalnie przyspieszono działanie polecenia 'git log -L', dzięki wykluczeniu nadmiarowych trójstopniowych porównań przy przetwarzaniu łączenia commitów. Wprowadzono optymalizacje w bibliotece xdiff.
  • Funkcje wewnętrzne, takie jak kodowanie i dekodowanie wartości całkowitych o zmiennej długości, będą opcjonalnie dostępne poprzez implementacje w języku Rust. Domyślnie kod Rust nie jest używany i wymaga wskazania flagi kompilacji WITH_RUST, aby go włączyć. W przyszłości planowane jest przepisanie ważniejszych komponentów Gita w Rust oraz dodanie Rust do obowiązkowych zależności kompilacyjnych w wersji Git 3.0.
  • Zaktualizowano listę zmian naruszających zgodność, które zostaną wprowadzone w gałęzi Git 3.0. W Git 3.0 zdecydowano zmianę domyślnej wartości ustawienia init.defaultBranch na „main”, co oznacza, że w repozytoriach utworzonych przez polecenie „git init” gałąź domyślna będzie nazywana „main”, a nie „master”. Zauważono również przejście na identyfikatory obiektów oparte na algorytmie haszującym SHA-256 przy inicjalizacji nowych repozytoriów. Aby uprościć przenośność między repozytoriami z identyfikatorami obiektów opartymi na haszach SHA-1 i SHA-256, w repozytorium z jednym algorytmem haszowania wprowadzono możliwość wykonywania operacji push i pull z repozytorium używającym innego algorytmu haszowania.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster