Wydano nowe wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.38. Git jest jednym z najpopularniejszych, niezawodnych i wydajnych systemów zarządzania wersjami, oferującym elastyczne narzędzia do nieliniowego rozwoju, oparte na rozgałęzianiu i scalaniu. Aby zapewnić integralność historii i odporność na zmiany „wstecz”, stosowane jest niejawne haszowanie całej wcześniejszej historii w każdym commicie, możliwe jest także uwierzytelnienie cyfrowymi podpisami deweloperów poszczególnych tagów i commitów.
W porównaniu z poprzednim wydaniem, nowa wersja zawiera 699 zmian, przygotowanych przy udziale 92 deweloperów, z których 24 uczestniczyło w projektowaniu po raz pierwszy. Główne nowości:
- Do głównego składu dołączono narzędzie „scalar”, opracowane przez firmę Microsoft do zarządzania dużymi repozytoriami. Narzędzie pierwotnie zostało napisane w języku C#, ale w git włączona została przerobiona wersja w języku C. Nowe narzędzie różni się od polecenia git tym, że domyślnie włącza dodatkowe możliwości i ustawienia wpływające na wydajność przy pracy z bardzo dużymi repozytoriami. Na przykład przy użyciu scalar zastosowano:
- Częściowe klonowanie do pracy z niepełną kopią repozytorium.
- Wbudowany mechanizm śledzenia zmian w systemie plików (FSMonitor), pozwalający na obycie się bez przeszukiwania całego katalogu roboczego.
- Indeksy obejmujące obiekty w różnych plikach pakietów (multi-pack).
- Pliki commit-graph z indeksem grafu commitów, stosowanym do optymalizacji dostępu do informacji o commitach.
- Tło cyklicznych prac do utrzymania optymalnej struktury repozytorium w tle, nie blokując sesji interaktywnej (co godzinę wykonywana jest praca polegająca na wstępnym ładowaniu świeżych obiektów z zdalnego repozytorium oraz aktualizacji pliku z grafem commitów, a każdej nocy uruchamiany jest proces pakowania repozytorium).
- Tryb „sparseCheckoutCone”, ograniczający dopuszczalne wzory przy częściowym klonowaniu.
- Do polecenia „git rebase” dodano opcję „—update-refs” do aktualizacji zależnych gałęzi, które krzyżują się z przenoszonymi gałęziami, aby ręcznie nie wykonywać operacji checkout do każdej zależnej gałęzi, aby przełączyć się na wymagany commit.
- Zapewniono zgodność polecenia „git rm” z częściowymi indeksami.
- Poprawiono zachowanie polecenia „git mv A B” podczas przenoszenia pliku z obszaru roboczego z częściowymi indeksami w trybie „cone” do zewnętrznego obszaru, dla którego ten tryb nie ma zastosowania.
- Przeprowadzono optymalizację formatu plików bitmap dla dużych repozytoriów — dodano opcjonalną tabelę indeksów zawierającą listę wybranych commitów i ich przesunięć.
- W poleceniu „git merge-tree” wprowadzono nowy tryb, w którym na podstawie dwóch wskazanych commitów obliczane jest drzewo z wynikiem scalania tak, jakby historie tych commitów były połączone.
- Dodano opcję „safe.barerepository” do zarządzania możliwością umieszczania repozytoriów bare (repozytoria, które nie zawierają obszaru roboczego) wewnątrz innych repozytoriów git. Ustawienie na wartość „explicit” pozwoli na użycie repozytoriów bare tylko w katalogu głównym. Aby umożliwić umieszczanie repozytoriów bare w podkatalogach, należy użyć wartości „all”.
- Do polecenia „git grep” dodano opcję „-m” („—max-count”), analogiczną do tej samej opcji w GNU grep, która pozwala ograniczyć liczbę wyświetlanych trafień.
- W poleceniu „ls-files” wprowadzono opcję „—format” do dostosowania wyświetlanych pól (na przykład, można włączyć wyświetlanie nazwy obiektu, trybów itp.).
- W „git cat-file” przy wyświetlaniu zawartości obiektów wprowadzono możliwość uwzględnienia powiązań autorów z emailami określonymi w pliku mailmap.
Źródło: opennet.ru
