Opublikowano wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.50. Git charakteryzuje się wysoką wydajnością i oferuje narzędzia do nieliniowego rozwoju, opierające się na rozgałęzianiu i scalaniu gałęzi. Aby zapewnić integralność historii i odporność na zmiany «wstecz», stosuje się niejawne haszowanie całej poprzedniej historii w każdym commicie, a także uwierzytelnianie cyfrowymi podpisami deweloperów poszczególnych tagów i commitów. Kod Git jest udostępniany na licencji GPLv2+.
W porównaniu do poprzedniego wydania, w nowej wersji wprowadzono 621 zmian, przygotowanych przy udziale 98 deweloperów, z których 35 bierze udział w projekcie po raz pierwszy. Główne nowości:
- Rozszerzono możliwość dzielenia na kilka plików pakietowych bazy niedostępnych obiektów („cruft packs”), do których w repozytorium nie ma odniesień (nie są nimi wspierane gałęzie ani tagi). Użycie kilku małych plików pakietowych zamiast jednego dużego pozwala znacznie zredukować operacje wejścia/wyjścia podczas przepakowywania repozytoriów z dużą liczbą niedostępnych obiektów, ponieważ dla każdej operacji przepakowywania nie trzeba przepisuje wszystkich danych.
W nowej wersji wprowadzono opcję „—combine-cruft-below-size”, która pozwala na zorganizowanie scalania istniejących plików pakietowych, których rozmiar nie przekracza określonej wartości. W przeciwieństwie do wcześniej dostępnej opcji „—max-cruft-size”, nowa opcja „—combine-cruft-below-size” nie ogranicza maksymalnego rozmiaru wynikowego pliku pakietowego, co pozwala efektywniej łączyć pliki pakietowe w repozytoriach z dużą liczbą niedostępnych obiektów, rozproszonych po kilku plikach pakietowych.
- Dodano eksperymentalne wsparcie dla inkrementalnego aktualizowania indeksów wielopakietowych MIDX (multi-pack index), w którym każda warstwa indeksu MIDX z informacją o dostępności obiektów jest umieszczana w osobnym pliku bitmapy. W bardzo dużych repozytoriach wprowadzony typ indeksów umożliwia szybkie i efektywne dodawanie nowych bitmap dostępności obiektów w miarę pojawiania się commitów.
- Z kodu źródłowego usunięto stary silnik wykonywania operacji scalania „recursive”, który został zastąpiony całkowicie przebudowanym silnikiem „ORT” (Ostensibly Recursive’s Twin), bardziej wydajnym, funkcjonalnym i wygodnym w zarządzaniu. ORT pozwala określić możliwość połączenia dwóch obiektów, nie tworząc nowych obiektów w repozytorium (przy starym silniku konieczne było wykonanie polecenia „git merge-tree —write-tree”, zapisując nowe obiekty w repozytorium). W Git 2.50 w poleceniu merge-tree wprowadzono opcję „—quiet”, dzięki której możliwość połączenia można sprawdzić na podstawie kodu zwrotnego bez zapisywania danych w repozytorium.
- Do „git cat-file —batch” i podobnych poleceń dodano opcję „—filter”, umożliwiającą pominięcie niektórych obiektów podczas wykonywania operacji. git cat-file —batch-check=’%(objectname)’ —filter=’object:type=tree’
- W poleceniu „git maintenance” wprowadzono trzy nowe działania: worktree-prune, rerere-gc i reflog-expire. Działanie worktree-prune ma na celu usunięcie przestarzałych lub uszkodzonych drzew roboczych (worktrees) w repozytorium. Działanie rerere-gc usuwa stare wpisy pozostające po usunięciu konfliktów scalania. Działanie reflog-expire usuwa przestarzałe, niedostępne obiekty z reflog.
- Dodano polecenie „git reflog drop”, które usuwa wszystkie dane reflog dla wskazanej gałęzi.
- Zoptymalizowano przetwarzanie i wykorzystywanie odniesień, na przykład wprowadzono cachowanie prefiksów odnośników, usunięto zbędne kontrole przy wykonywaniu polecenia „git update-ref”, zwiększono efektywność wyszukiwania istniejących iteratorów odnośników.
- Dla biblioteki cURL dodano ustawienia KeepAlive: http.keepAliveIdle, http.keepAliveInterval i http.keepAliveCount.
- W poleceniu „git rev-list” dodano możliwość wyjścia w formacie przyjaznym dla maszyn, w którym każde pole jest oddzielone znakiem NUL.
- Język Perl został usunięty z zależności potrzebnych do narzędzi pracy z dokumentacją i wykonywania zestawu testowego („make test”). Wiele jedno-liniowych skryptów Perl w testach zostało zastąpionych funkcjami shell lub przepisanych w języku C.
- Dodano procesor userdiff dla formatu plików konfiguracyjnych „.ini”.
- W poleceniu send-email poprawiono wsparcie dla serwera SMTP Outlook.
Źródło: opennet.ru
