Dostępny jest system kontroli wersji Git 2.41.

Po trzech miesiącach rozwoju opublikowano wersję systemu rozproszonego zarządzania kodem źródłowym Git 2.41. Git jest jednym z najpopularniejszych, niezawodnych i wysokowydajnych systemów kontroli wersji, oferującym elastyczne narzędzia do nieliniowego rozwoju, oparte na rozwidleniach 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ż uwierzytelnienie cyfrowymi podpisami deweloperów dla poszczególnych tagów i commitów.

W porównaniu do poprzedniej wersji w nowej wersji wprowadzono 542 zmiany, przygotowane przez 95 deweloperów, z czego 29 wzięło udział w rozwoju po raz pierwszy. Główne nowości:

  • Ulepszono obsługę obiektów niedostępnych (unreachable), do których w repozytorium nie ma odniesień (nie są wskazywane przez gałęzie ani tagi). Obiekty niedostępne są usuwane przez zbieracz śmieci, ale przed usunięciem pozostają w repozytorium przez pewien czas, aby wykluczyć stany wyścigu. Aby śledzić okres pozostawania obiektów niedostępnych, konieczne jest przypisanie do nich znaczników z czasem zmiany tych obiektów, co uniemożliwia przechowywanie ich w jednym pakiecie (pack-file), w którym wszystkie obiekty mają ten sam czas zmiany. Wcześniej każdy obiekt niedostępny był zapisywany w oddzielnym pliku, co prowadziło do problemów przy posiadaniu dużej liczby nowych niedostępnych obiektów, które jeszcze nie kwalifikowały się do usunięcia. W nowej wersji domyślnie do pakowania obiektów niedostępnych wykorzystano mechanizm „cruft packs”, który pozwala na przechowywanie wszystkich obiektów niedostępnych w jednym pakiecie, a dane o czasie modyfikacji każdego obiektu odzwierciedlane są w osobnej tabeli, przechowywanej w pliku z rozszerzeniem „.mtimes” i powiązanej za pomocą pliku indeksowego z rozszerzeniem „.idx”.
    Dostępny jest system kontroli wersji Git 2.41.
  • Domyślnie włączono prowadzenie na dysku odwrotnego indeksu (revindex) dla pakietów. Podczas testowania na repozytorium torvalds/linux zastosowanie odwrotnego indeksu pozwoliło przyspieszyć operacje wymagające dużych zasobów „git push” o 1,49 razy, a proste operacje, takie jak obliczenie rozmiaru jednego obiektu z użyciem „git cat-file —batch=’%(objectsize:disk)'”, o 77 razy. Pliki („.rev”) z odwrotnym indeksem będą przechowywane wewnątrz repozytorium w katalogu „.git/objects/pack”.

    Przypominamy, że Git przechowuje wszystkie dane w formie obiektów, które są umieszczane w oddzielnych plikach. W celu zwiększenia efektywności pracy z repozytorium obiekty dodatkowo umieszczane są w plikach paczek, w których informacje przedstawione są w postaci strumienia obiektów, idących jeden po drugim (analogiczny format stosowany jest przy przesyłaniu obiektów poleceniami git fetch i git push). Dla każdego pliku paczki tworzony jest plik indeksowy (.idx), który pozwala na bardzo szybkie określenie przesunięcia w pliku paczki dla danego obiektu na podstawie identyfikatora obiektu.

    W nowym wydaniu włączono indeks odwrotny, mający na celu optymalizację procesu identyfikacji obiektu na podstawie informacji o położeniu obiektu w pliku paczki. Wcześniej taka transformacja była wykonywana na żywo podczas analizy pliku paczki i była przechowywana tylko w pamięci, co nie pozwalało na ponowne wykorzystanie takich indeksów i zmuszało do generowania indeksu za każdym razem. Operacja budowania indeksu sprowadza się do utworzenia tablicy par „obiekt-pozycja” i jej sortowania według pozycji, co może zająć dużo czasu dla dużych plików paczek.

    Na przykład operacja wyświetlania zawartości obiektów, w której używany jest indeks bezpośredni, była wykonywana 62 razy szybciej niż operacja pokazywania rozmiaru obiektów, dla której dane dotyczące powiązania pozycji z obiektem nie były indeksowane. Po zastosowaniu indeksu odwrotnego wskazane operacje zaczęły zajmować mniej więcej ten sam czas. Indeksy odwrotne również przyspieszają operacje przesyłania obiektów przy wykonywaniu poleceń fetch i push dzięki bezpośredniemu przesyłaniu już gotowych danych z dysku.

    Dostępny jest system kontroli wersji Git 2.41.
  • W protokole „credential helper”, stosowanym do przesyłania poświadczeń podczas dostępu do repozytoriów z ograniczonym dostępem, dodano obsługę przesyłania nagłówków WWW-Authenticate między obsługującym poświadczenia a usługą, w której odbywa się uwierzytelnienie. Obsługa nagłówka WWW-Authenticate pozwala na przesyłanie parametrów zakresu OAuth dla bardziej szczegółowego rozgraniczenia dostępu użytkownika do repozytoriów oraz wydzielania obszarów dostępnych dla zapytań.
  • Do zespołu for-each-ref dodano opcję formatowania „%(ahead-behind:<base>)”, która umożliwia jednoczesne uzyskanie informacji o liczbie commitów, które są obecne lub nieobecne w określonej gałęzi w odniesieniu do innej gałęzi (o ile jedna gałąź odstaje lub wyprzedza drugą na poziomie commitów). Wcześniej, aby uzyskać podobne informacje, trzeba było wykonać dwa oddzielne polecenia: „git rev-list —count main..my-feature” w celu uzyskania liczby unikalnych commitów dla gałęzi oraz „git rev-list —count my-feature..main” w celu uzyskania liczby brakujących commitów. Teraz takie obliczenia można sprowadzić do jednego polecenia, co upraszcza pisanie handlerów i skraca czas wykonania. Na przykład, aby pokazać gałęzie, które nie przeszły scalania, i ocenić ich odstępstwa od gałęzi głównej, można użyć jednego wiersza: $ git for-each-ref —no-merged=origin/HEAD \ —format=’%(refname:short) %(ahead-behind:origin/HEAD)’ \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3 zamiast wcześniej stosowanego skryptu, który działał 17 razy wolniej: $ git for-each-ref —format=’%(refname:short)’ —no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead=„$(git rev-list —count origin/HEAD..$ref)” behind=„$(git rev-list —count $ref..origin/HEAD)” printf „%s %d %d\n” „$ref” „$ahead” „$behind” done | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • Do polecenia „git fetch” dodano opcję „—porcelain”, która, gdy zostanie określona, powoduje, że wyjście jest generowane w formacie „ ”, co jest mniej czytelne, ale bardziej praktyczne do analizy w skryptach.
  • Dodano ustawienie „fetch.hideRefs”, które przyspiesza operacje „git fetch” poprzez ukrycie części odniesień w lokalnym repozytorium na etapie sprawdzania przez serwer pełnego zestawu obiektów, co pozwala zaoszczędzić czas, ograniczając sprawdzanie tylko serwerów, z których bezpośrednio wydobywane są dane. Na przykład, przeprowadzając test na systemie z repozytoriami zawierającymi dużą liczbę śledzonych zewnętrznych odniesień, wykluczenie wszystkich linków, z wyjątkiem tych skierowanych do docelowego serwera $remote, pozwoliło skrócić czas wykonania operacji „git fetch” z 20 minut do 30 sekund. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • W poleceniu „git fsck” wprowadzono możliwość sprawdzania uszkodzeń, zgodności sum kontrolnych oraz poprawności wartości w bitowych mapach dostępności i indeksach odwrotnych.
  • W zespole „git clone —local” wprowadzono komunikat o błędzie przy próbie kopiowania z repozytorium zawierającego symboliczne linki wewnątrz $GIT_DIR.

Ź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