Git 2.54, rozproszony system zarządzania kodem źródłowym, został wydany. Git charakteryzuje się wysoką wydajnością i oferuje nieliniowe możliwości rozwoju oparte na rozgałęzieniach i scalaniu. Aby zapewnić integralność historyczną i odporność na zmiany wsteczne, wykorzystuje niejawne haszowanie całej poprzedniej historii w każdym zatwierdzeniu, a także podpisy cyfrowe poszczególnych tagów i zatwierdzeń. Git jest licencjonowany na licencji GPLv2+.
W porównaniu z poprzednią wersją, nowa wersja zawiera 770 zmian, wprowadzonych przez 137 programistów (w tym 66 nowych programistów Gita). Najważniejsze nowe funkcje obejmują:
- Zaimplementowano polecenie „git history”, które udostępnia eksperymentalne możliwości przepisywania historii zatwierdzeń, co jest łatwiejsze i bezpieczniejsze w użyciu niż zmiana bazy zatwierdzeń za pomocą polecenia „git rebase”. Dostępne są dwie operacje:
- „przeformułowanie historii git” „aby przepisać wiadomość w określonym commitcie bez zmiany drzewa roboczego ani indeksu (poza notatką, reszta pozostaje nienaruszona). Na przykład, aby poprawić literówkę.
- podział historii git » interaktywnie podzielić określony commit na dwa różne commity, przenosząc wybrane części z commita oryginalnego do commita dodatkowego.
W przyszłych wersjach pojawią się dodatkowe polecenia: „git history fixup” służące do naprawiania zatwierdzenia, „git history drop” służące do usuwania zatwierdzenia, „git history reorder” służące do zmiany kolejności zatwierdzeń i „git history squash” służące do skrócenia zatwierdzenia.
- Wprowadzono nową metodę definiowania hooków w plikach konfiguracyjnych. Zamiast umieszczać skrypty z hookami w katalogu „.git/hooks” w każdym repozytorium, polecenia wywoływania hooków można teraz określać bezpośrednio w plikach konfiguracyjnych. Ustawienia można powiązać z repozytorium lub określić w plikach konfiguracyjnych, które mają zastosowanie do wszystkich repozytoriów (/etc/gitconfig) lub repozytoriów użytkowników (~/.gitconfig). Do jednego zdarzenia można powiązać wiele hooków. Skrypty z „.git/hooks” nadal będą wywoływane, ale są uruchamiane po hookach z plików konfiguracyjnych. Aby wyświetlić listę hooków, należy użyć polecenia „git hook list”, a aby selektywnie wyłączyć wywoływanie hooków, należy użyć ustawienia „hook”. .enabled = false." [hak "linter"] zdarzenie = polecenie przed zatwierdzeniem = ~/bin/linter --cpp20 [hak "no-leaks"] zdarzenie = polecenie przed zatwierdzeniem = ~/bin/leak-detector $ git hook lista pre-commit globalny linter ~/bin/linter --cpp20 lokalny no-leaks ~/bin/leak-detector
- Polecenie „git maintenance” domyślnie korzysta ze strategii „geometrycznej” („git config set maintenance.strategy geometric”), co skraca czas konserwacji dużych repozytoriów mono. W porównaniu z poprzednio stosowaną strategią, która wykorzystywała logikę podobną do „git gc”, nowa strategia pozwala uniknąć ponownego pakowania wszystkich obiektów i eliminuje operacje wymagające dużych zasobów, takie jak scalanie wszystkich plików pakietów (tam, gdzie to możliwe, scalanie odbywa się etapami, bez usuwania usuniętych obiektów).
- Baza danych obiektów (ODB) i powiązane z nią interfejsy API zostały przeniesione do nowej architektury opartej na wtykowych back-endach. Ta restrukturyzacja abstrahuje format przechowywania obiektów i umożliwi implementację funkcji, takich jak alternatywne back-endy i formaty obiektów, na przykład w celu wydajniejszego przechowywania dużych plików binarnych lub optymalizacji wydajności dużych usług hostingowych Git.
- Polecenie „git repo structure”, które wyświetla informacje o strukturze repozytorium, wyświetla nie tylko całkowity rozmiar, ale także największe obiekty każdego typu, umożliwiając oszacowanie rozmiaru bez korzystania z narzędzia innej firmy git-sizer. $ git repo structure … | * Największe obiekty | | | * Zatwierdzenia | | | * Maksymalny rozmiar [1] | 17.23 KiB | | * Maksymalna liczba elementów nadrzędnych [2] | 10 | | * Drzewa | | | * Maksymalny rozmiar [3] | 58.85 KiB | | * Maksymalna liczba wpisów [4] | 1.18 k | | * Blob | | | * Maksymalny rozmiar [5] | 1019.51 KiB | | * Tagi | | | * Maksymalny rozmiar [6] | 7.13 KiB |
- W poleceniu „git replay” używanym zamiast „git rebase” do ponownego tworzenia historii serwer bez działającego drzewa, aktualizacje atomowe odniesień są domyślnie włączone (zamiast wyświetlania poleceń update-ref do ręcznego wykonania), wprowadzono opcję „--revert” umożliwiającą cofnięcie zmian z serii zatwierdzeń, powstałe puste zatwierdzenia są odrzucane, a także wprowadzono możliwość rekonstrukcji historii aż do zatwierdzenia głównego.
- Dodano opcję „--maximal-only” do „git rev-list” i podobnych poleceń, aby wyświetlać tylko zatwierdzenia, do których nie można dotrzeć za pomocą innych zatwierdzeń.
- Polecenie „git repo info” ma teraz opcję „--keys” umożliwiającą wyświetlenie listy wszystkich znanych kluczy.
- Podczas nawigacji między blokami kodu za pomocą klawiszy „J” i „K” w poleceniu „git add -p” bloki już zatwierdzone i pominięte są teraz oznaczane. Dodano opcję „--no-auto-advance”, która wyłącza automatyczne przechodzenie do następnego pliku, umożliwiając powrót do poprzednich plików przed zatwierdzeniem.
- Interfejs internetowy „gitweb” został zoptymalizowany do użytku na urządzeniach mobilnych.
- Polecenie „git apply --directory” zapewnia, że ścieżki plików zostaną znormalizowane przed użyciem, np. „./un/../normalized/path”.
- Udokumentowano możliwość dodawania niestandardowych podpoleceń poprzez umieszczanie plików „git-”. » w katalogu z plikami wykonywalnymi.
- Do polecenia „git send-email” dodano obsługę certyfikatów klienta.
- Polecenie „git status” ma teraz ustawienie „status.compareBranches”, które umożliwia określenie gałęzi, z którymi ma zostać porównana bieżąca gałąź. [status] compareBranches = @{upstream} @{push}
- Do polecenia git rebase dodano opcję „--trailer”, która ułatwia dodawanie metadanych do wszystkich zatwierdzeń. git rebase --trailer „Przejrzane przez: Test »
- Polecenie „git fast-import” umożliwia teraz zastępowanie podpisów w przypadku zatwierdzeń, które stały się nieprawidłowe po zaimportowaniu.
- Dodano obsługę kompresji indeksu wielopakowego (MIDX), która łączy małe warstwy indeksu MIDX zawierające informacje o dostępności obiektów i powiązane mapy bitowe, redukując liczbę skumulowanych warstw w długoterminowych repozytoriach.
- Polecenie „git backfill” obsługuje teraz określanie rewizji (zakresów zatwierdzeń) i masek ścieżek (pathspecs), aby ograniczyć pobierane części historii zmian. git backfill main~100..main git backfill — '*.c'
- Dodano alternatywne formy wywołania polecenia „git config list”: „git config -l” i „git config --list”.
- Zezwól na znaki spoza zestawu ASCII w nazwach aliasów poleceń określonych w pliku konfiguracyjnym. [alias "get"] polecenie = pobierz
- Zmieniono sposób wyświetlania podpisów, których klucze GPG wygasły, ale były ważne w momencie podpisywania zatwierdzenia. Podpisy te są teraz wyświetlane jako ważne z informacją o wygaśnięciu klucza (wcześniej były podświetlane na czerwono, co sprawiało wrażenie, że są nieważne).
- Podczas dostępu do repozytoriów przez HTTP, kod błędu 429 (Zbyt wiele żądań) jest teraz obsługiwany poprawnie. Żądania, które kończą się tym błędem, nie są już traktowane jako krytyczne, lecz jako błędy tymczasowe, dla których operacja powinna zostać ponowiona po upływie określonego czasu. Opóźnienie ponowienia próby jest ustawiane za pomocą opcji „http.retryAfter”, liczba ponowień wynosi „http.maxRetries”, a limit czasu wynosi „http.maxRetryTime”.
Źródło: opennet.ru
