wydanie rozproszonego systemu zarządzania tekstami źródłowymi . Git jest jednym z najpopularniejszych, najbardziej niezawodnych i wydajnych systemów zarządzania wersjami, oferującym elastyczne narzędzia do nieliniowego rozwoju, oparte na rozgałęzianiu i scalaniu gałęzi. Dla zapewnienia integralności historii i odporności na zmiany „wstecz” stosowane jest niejawne haszowanie całej poprzedniej historii w każdym commicie, a także możliwe jest uwierzytelnienie cyfrowymi podpisami deweloperów poszczególnych tagów i commitów.
W porównaniu z poprzednią wersją w nowej wersji wprowadzono 504 zmian, opracowanych przez 64 programistów, z których 12 uczestniczyło w rozwoju po raz pierwszy. :
- Domyślnie nastąpiła zmiana na protokołu komunikacyjnego Git, który jest używany przy zdalnym łączeniu klienta z serwerem Git. Druga wersja protokołu wyróżnia się możliwością filtrowania gałęzi i tagów po stronie serwera oraz zwracaniem klientowi skróconej listy linków. Wcześniej przy wykonywaniu dowolnego polecenia pobierania klient zawsze otrzymywał pełną listę linków w całym repozytorium, nawet gdy aktualizował tylko jedną gałąź lub sprawdzał aktualność swojej kopii repozytorium. Inną ważną nowością jest możliwość dodawania nowych funkcji do protokołu w miarę pojawiania się nowej funkcjonalności w narzędziach. Kod klienta pozostaje zgodny ze starym protokołem i może działać zarówno z nowymi, jak i starymi serwerami, automatycznie przełączając się na pierwszą wersję, jeśli serwer nie obsługuje drugiej.
- Do polecenia „git config” dodano opcję „—show-scope”, która ułatwia identyfikację miejsca, w którym określone są dane ustawienia. Git pozwala na definiowanie ustawień w różnych miejscach: w repozytorium (.git/info/config), w katalogu użytkownika (~/.gitconfig), w systemowym pliku konfiguracyjnym (/etc/gitconfig), a także za pomocą opcji wiersza poleceń i zmiennych środowiskowych. Przy używaniu „git config” dość trudno jest zrozumieć, gdzie dokładnie zostało określone żądane ustawienie. Aby rozwiązać ten problem, dostępna była opcja „—show-origin”, ale jedynie pokazuje ona ścieżkę do pliku, w którym określono ustawienie, co jest przydatne przy zamiarze edytowania pliku, ale nie pomaga, gdy trzeba zmienić wartość za pomocą „git config” z opcjami „—system”, „—global” lub „—local”. Nowa opcja „—show-scope” wyświetla kontekst określenia zmiennych i może być stosowana razem z „—show-origin”:
$ git —list —show-scope —show-origin
global file:/home/user/.gitconfig diff.interhunkcontext=1
global file:/home/user/.gitconfig push.default=current
[…]
local file:.git/config branch.master.remote=origin
local file:.git/config branch.master.merge=refs/heads/master$ git config —show-scope —get-regexp 'diff.*'
global diff.statgraphwidth 35
local diff.colormoved plain$ git config —global —unset diff.statgraphwidth
- W ustawieniach powiązania Zezwalają na użycie symboli wieloznacznych w adresach URL. Dowolne ustawienia HTTP i dane uwierzytelniające w Git mogą być konfigurowane zarówno dla wszystkich połączeń (http.extraHeader, credential.helper), jak i dla połączeń związanych z URL (credential.https://example.com.helper, credential.https://example.com.helper). Do tej pory użycie symboli wieloznacznych, takich jak *.example.com, było dozwolone jedynie dla ustawień HTTP, ale nie było wspierane dla przypisania danych uwierzytelniających. W Git 2.26 te różnice zostały usunięte i na przykład, aby przypisać nazwę użytkownika do wszystkich subdomen, można było określić:
[credential «https://*.example.com»]
nazwa_użytkownika = ttaylorr
- Kontynuowano rozszerzenie eksperymentalnego wsparcia dla częściowego klonowania (partial clones), które umożliwia przenoszenie tylko części danych i pracę z niepełną kopią repozytorium. W nowej wersji dodano nowe polecenie „git sparse-checkout add”, które pozwala na dodanie poszczególnych katalogów do stosowania operacji „checkout” tylko na części roboczego drzewa, zamiast wymieniać wszystkie podobne katalogi naraz za pomocą polecenia „git sparse-checkout set” (można dodawać po jednym katalogu, bez ponownego podawania całej listy za każdym razem).
Na przykład, aby sklonować repozytorium git/git bez przesyłania blobów, przy ograniczeniu sprawdzenia do tylko katalogu głównego roboczej kopii oraz przy szczególnym oznaczeniu do wyodrębnienia katalogów „t” i „Documentation”, można podać:$ git clone —filter=blob:none —sparse git@github.com:git/git.git
$ cd git
$ git sparse-checkout init —cone$ git sparse-checkout add t
….
$ git sparse-checkout add Documentation
….
$ git sparse-checkout list
Dokumentacja
t - Widocznie zwiększono wydajność polecenia „git grep”, stosowanego do wyszukiwania zarówno w aktualnej zawartości repozytorium, jak i w historycznych rewizjach. Aby przyspieszyć wyszukiwanie, dozwolono na skanowanie zawartości roboczego drzewa z użyciem wielu wątków („git grep —threads”), jednak wyszukiwanie w historycznych rewizjach było jednowątkowe. Teraz to ograniczenie zostało zniesione dzięki wdrożeniu możliwości równoległego wykonywania operacji odczytu z magazynu obiektów. Domyślnie liczba wątków jest ustawiana na liczbę rdzeni CPU, co w większości przypadków nie wymaga teraz jawnego ustawiania opcji „—threads”.
- Dodano wsparcie dla automatycznego uzupełniania subkomend, ścieżek, linków i innych argumentów polecenia „git worktree”, które pozwala na pracę z wieloma kopiami roboczymi repozytorium.
- Dodano wsparcie dla jasnych kolorów, dla których dostępne są sekwencje ANSI escape. Na przykład, w ustawieniach kolorów podświetlenia «git config —color» lub «git diff —color-moved» przez opcję «—format» dla jasnoniebieskiego można podać «%C(brightblue)».
- Dodana nowa wersja skryptu , zapewniającego integrację z mechanizmem aby przyspieszyć śledzenie zmian plików i pojawianie się nowych plików. Po aktualizacji git wymaga hooka w repozytorium.
- Dodano optymalizacje w celu przyspieszenia operacji częściowego klonowania (partial clones), związane z zastosowaniem bitmap
(bitmap machinery), aby uniknąć pełnego przeszukiwania wszystkich obiektów podczas filtrowania wyników. Sprawdzanie blobów (—filter=blob:none i —filter=blob:limit=n) przy częściowym klonowaniu odbywa się
znacznie szybciej. GitHub ogłosił zastosowanie poprawek z tymi optymalizacjami oraz eksperymentalne wsparcie dla częściowego klonowania. - Polecenie «git rebase» zostało przeniesione na inny backend, który domyślnie używa mechanizmu ‘merge’ (wcześniej stosowanego dla «rebase -i») zamiast ‘patch+apply’. W niektórych detalach backendy różnią się, na przykład, po kontynuacji operacji po rozwiązaniu konfliktu (git rebase —continue) nowy backend proponuje edytację wiadomości commit, a stary po prostu używał starej wiadomości. Aby powrócić do starego zachowania, można użyć opcji «—apply» lub ustawić zmienną konfiguracyjną ‘rebase.backend’ na wartość ‘apply’.
- Przykład obsługi parametrów uwierzytelniania, podanych za pomocą .netrc, został przekształcony w formę gotową do użycia prosto z pudełka.
- Dodano ustawienie gpg.minTrustLevel do określenia minimalnego poziomu zaufania dla różnych elementów wykonujących weryfikację podpisu cyfrowego.
- W «git rm» i «git stash» dodano opcję «—pathspec-from-file».
- Kontynuowano ulepszanie zestawów testowych w ramach przygotowań do przejścia na algorytm haszujący SHA-2 zamiast SHA-1.
Źródło: opennet.ru
