Wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.25

Dostępny wydanie rozproszonego systemu zarządzania tekstami źródłowymi Git 2.25.0. 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 583 zmiany, przygotowane przy udziale 84 deweloperów, z których 32 uczestniczyło w rozwoju po raz pierwszy. Podstawowe nowości:

  • Zbliża się do stabilizacji i pełnej gotowości opcja częściowego klonowania (partial clones), umożliwiająca przenoszenie jedynie części danych i pracę z niepełną kopią repozytorium. Przy zwykłym klonowaniu z repozytorium kopiowane są wszystkie dane, w tym każda wersja każdego pliku z historii zmian. W przypadku bardzo dużych repozytoriów kopiowanie danych prowadzi do znacznego wzrostu transferu i zajętości dysku, nawet jeśli dewelopera interesuje tylko podzbiór plików. Aby uprościć pozyskiwanie tylko części drzewa roboczego źródłowych kodów w nowym wydaniu zaproponowano eksperymentalne polecenie „sparse-checkout” i nową opcję „—sparse” dla polecenia „clone”.

    Wcześniej proces wybiórczego klonowania realizowano poprzez podanie filtrów do odfiltrowania zbędnej zawartości oraz opcja „—no-checkout” do wyłączenia uzupełniania brakujących plików. Po tym, przed wykonaniem operacji checkout, należało włączyć ustawienie core.sparseCheckout i zdefiniować w pliku .git/info/sparse-checkout listę wzorców wykluczających ścieżki. Na przykład, aby sklonować bez blobów i zabronić wydobywania plików z zagnieżdżonych katalogów na głębokości 2 i więcej, można było wykonać:

    git clone —filter=blob:none —no-checkout /your/repository/here repo
    $ cd repo
    $ cat >.git/info/sparse-checkout <EOF
    /*
    !/*
    EOF
    $ git config core.sparseCheckout 1
    $ git checkout .

    Nowe polecenie „git sparse-checkout” znacznie upraszcza pracę i sprowadza proces organizacji pracy z niepełnym repozytorium do poleceń:

    git clone —filter=blob:none —sparse /your/repository/here repo
    git sparse-checkout set /path/to/check/out

    Polecenie sparse-checkout pozwala ustawić listę ścieżek do checkout (set) bez ręcznej konfiguracji .git/info/sparse-checkout, a także wyświetlić bieżącą listę ścieżek (list) oraz włączyć lub wyłączyć częściowy checkout (enable/disable).

    Aby zoptymalizować pracę z bardzo dużymi repozytoriami i listami wzorców, zaproponowano ustawienie „git config core.sparseCheckoutCone„, które ogranicza dozwolone wzorce (zamiast dowolnych wzorców .gitignore można ustalić, które wszystkie ścieżki i które wszystkie pliki w danym podkatalogu powinny zostać wydobyte). Na przykład, jeśli w dużym repozytorium znajduje się katalog „A/B/C” i cała praca skupia się w podkatalogu „C”, to po włączeniu trybu sparseCheckoutCone polecenie „git sparse-checkout set A/B/C” wydobędzie zawartość „C” w całości, ale z „A” i „B” wydobędzie jedynie te części, które są potrzebne do pracy z „C”.

  • Z dokumentacji („git rebase -h”) usunięto wszystkie wzmianki o opcji „—preserve-merges”, która została uznana za przestarzałą, a zamiast tego do przenoszenia zestawu commitów należy używać „git rebase —rebase-merges«.
  • Aby poprawić czytelność wiadomości z patchami wysyłanymi na listy mailingowe, dodano opcję „git format-patch —cover-from-description subject”, dzięki której jako temat listu towarzyszącego zestawowi patchy używany jest pierwszy akapit z tekstu opisu gałęzi.
  • Zrealizowano wsparcie dla wspólnego używania polecenia „git apply —3way” oraz ustawienia „merge.conflictStyle” (polecenie „git apply” teraz uwzględnia styl opisu konfliktu z merge.conflictStyle w przypadku konieczności rozwiązania konfliktu po próbie zastosowania pliku z patchem w repozytorium).
  • Kod definiujący funkcje używany w takich operacjach jak „git diff/grep —show-function/—function-context” został rozszerzony o wsparcie dla definiowania granic funkcji w programach napisanych w języku Elixir.
  • W „git add”, „git commit”, „git reset” i innych poleceniach dodano nową opcję „—pathspec-from-file”, która umożliwia załadowanie listy ścieżek z pliku lub z wejścia, zamiast ich wypisywania w wierszu poleceń.
  • Rozwiązano problem z definiowaniem zmian nazw na poziomie katalogów podczas zapisywania commitów. Wykrywanie nie działało w przypadku przenoszenia zawartości podkatalogu do głównego katalogu repozytorium.
  • Proponowana jest wstępna implementacja przeprojektowanego polecenia „git add -i”, które umożliwia interaktywne dodawanie zmienionych treści, przepisane z Perla na C. Prowadzona jest analogiczna przeróbka polecenia „git add -p”.
  • Przeprowadzono refaktoryzację polecenia „git log —graph”, które formuje obraz ASCII grafu z historią zmian w repozytorium. Przeróbka pozwoliła znacząco poprawić i uprościć wyjście bez zniekształcania struktury historii, co na przykład rozwiązało problem z wykroczeniem rysunku poza szerokość linii terminala.
  • Opcja „git log —format=..”, pozwalająca na zmianę formatu wyjścia,
    została rozszerzona o wsparcie dla flag „l/L” do wyświetlania tylko części adresu e-mail, wskazanej przed znakiem „@” (przykładowo, użyteczne, gdy wszyscy programiści mają wszystkie e-maile w tej samej domenie).
  • Do polecenia „git submodule” dodano podpolecenie „set-url”.
  • Zbiory testowe zostały zaktualizowane w ramach przygotowań do przejścia na
    algorytm haszujący SHA-2 zamiast SHA-1.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster