Po trzech miesiącach prac rozwojowych opublikowano wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.43. Git jest jednym z najpopularniejszych, niezawodnych i wydajnych systemów zarządzania wersjami, oferującym elastyczne narzędzia do nieliniowego rozwoju, oparte na gałęzieniu i łączeniu. Aby zapewnić integralność historii i odporność na zmiany „wstecz”, stosuje się niejawne haszowanie całej poprzedniej historii w każdym commicie, a także istnieje możliwość uwierzytelnienia cyfrowymi podpisami deweloperów poszczególnych tagów i commitów.
W porównaniu do poprzedniego wydania nowa wersja wprowadza 464 zmian, przygotowanych przy udziale 80 deweloperów, z których 17 uczestniczyło w pracy po raz pierwszy. Główne nowości:
- Do zespołu „git repack” dodano opcje „—filter” i „—filter-to”, które pozwalają na przegrupowanie repozytorium z uwzględnieniem określonego filtru obiektów, a w razie potrzeby przeniesienie do osobnego miejsca obiektów, które nie spełniają danego filtru. Opcje te można wykorzystać do podziału repozytorium zgodnie z określonymi kryteriami (na przykład do usunięcia niepotrzebnych lub zbyt dużych obiektów), zachowując jednocześnie możliwość dostępu do wszystkich części za pomocą częściowego klonowania. Na przykład, aby pozostawić w repozytorium blobów o rozmiarze mniejszym niż 1 MB i przenieść do osobnego repozytorium pozostałe duże obiekty, można wykonać: $ git init —bare ..\/backup.git $ git repack -ad —filter=’blob:limit=1m’ \ —filter-to=..\/backup.git\/objects\/pack\/pack
Inicjalizacja repozytorium za pomocą częściowego klonowania pozwala na pracę z niepełną kopią repozytorium, poprawnie przetwarzając odwołania do brakujących obiektów (przy odwołaniu do brakujących obiektów, będą one na bieżąco ładowane w razie potrzeby).
- Dodano wsparcie dla pracy z wieloma plikami pack zawierającymi informacje o niedostępnych obiektach („cruft packs”), do których w repozytorium brak odniesień (Brak referencji w branchach lub tagach). Nowa opcja „git repack —max-cruft-size” pozwala określić maksymalny rozmiar pojedynczego pliku pack i podzielić bazę niedostępnych obiektów na serię małych plików pack. Użycie kilku małych plików pack zamiast jednego dużego znacznie zmniejsza operacje wejścia/wyjścia podczas repakowania repozytoriów z dużą liczbą niedostępnych obiektów, ponieważ nie ma potrzeby zapisywania wszystkich danych dla każdej operacji repakowania.
- Dodano rozpoznawanie prób podwójnego cofnięcia commita przez „git revert” oraz uwzględnienie tego w komunikacie o cofnięciu (przy powtórnym „git revert” zamiast „Revert: Revert: fix bug” zostanie zapisane „Reapply fix bug”, a przy trzecim cofnięciu zmiany — „Revert Reapply fix bug”). $ git revert —no-edit HEAD >/dev/null $ git revert —no-edit HEAD >/dev/null $ git log —oneline a300922 (HEAD -> main) Reapply „fix bug” 0050730 Revert „fix bug” b290810 fix bug
- Umożliwiono jednoczesne użycie opcji „—rfc” i „—subject-prefix”. Na przykład do utworzenia wiadomości z prefiksem „[RFC PATCH bpf-next]” w temacie wiadomości można podać: $ git format-patch —subject-prefix=„PATCH bpf-next” —rfc
- W poleceniu „git log” pozwolono na użycie specyfikatora „%(decorate)” do wyświetlania nazw powiązanych branchy podczas definiowania formatu za pomocą opcji „—format”, na przykład: $ git log —format=’%cr%(decorate) (%h) %s’ 3 dni temu (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes: drobne poprawki w 2.43.0 notatkach o wydaniach 7 dni temu (tag: v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 7 dni temu (8ed4eb7538) Scalono branche ‘tb/rev-list-unpacked-fix’
- W „git for-each-ref” i podobnych poleceniach dodano możliwość stosowania reguł .mailmap do specyfikatorów formatu podanych za pomocą opcji „—format”, takich jak „%(authorname)” i „%(committeremail)”.
Źródło: opennet.ru
