wydanie rozproszonego systemu kontroli źródła . Git to jeden z najpopularniejszych, niezawodnych i wydajnych systemów kontroli wersji, który zapewnia elastyczne nieliniowe narzędzia programistyczne oparte na rozgałęzianiu i łączeniu gałęzi. Aby zapewnić integralność historii i odporność na zmiany wsteczne, w każdym zatwierdzeniu stosowany jest niejawny hasz całej poprzedniej historii, możliwa jest również weryfikacja poszczególnych tagów i zatwierdzeń za pomocą podpisów cyfrowych od programistów.
W porównaniu do poprzedniej wersji, nowa wersja zawierała 583 zmiany, przygotowane przy udziale 84 programistów, z czego 32 wzięło udział w tworzeniu po raz pierwszy. :
- Częściowe klony, które pozwalają na migrację tylko części danych i pracę z niekompletną kopią repozytorium, zbliżają się do stabilizacji i pełnej gotowości. Normalny klon kopiuje wszystkie dane z repozytorium, w tym każdą wersję każdego pliku w historii rewizji. W przypadku bardzo dużych repozytoriów kopiowanie danych powoduje znaczny wzrost ruchu i miejsca na dysku, nawet jeśli deweloper jest zainteresowany tylko podzbiorem plików. Aby ułatwić uzyskanie tylko części drzewa roboczego kodu źródłowego, ta wersja wprowadza eksperymentalne polecenie „sparse-checkout” i nową opcję „--sparse” do polecenia „clone”.
Wcześniej proces selektywnego klonowania przeprowadzano za pomocą zadania aby odfiltrować zbędną zawartość i opcję "--no-checkout", aby wyłączyć uzupełnianie brakujących plików. Następnie, przed wykonaniem operacji checkout, konieczne było włączenie ustawienia core.sparseCheckout i zdefiniowanie listy wzorców dla wykluczonych ścieżek w pliku .git/info/sparse-checkout. Na przykład, aby klonować bez blobów i zabronić wyodrębniania plików z zagnieżdżonych katalogów o głębokości 2 lub większej, można wykonać:
git clone --filter=blob:none --no-checkout /twoje/repozytorium/tutaj repozytorium
$ cd repozytorium
$ cat >.git/info/sparse-checkout
/*
!/*
EOF
$ git konfiguracja core.sparseCheckout 1
$git checkout .Nowe polecenie „git sparse-checkout” znacznie upraszcza pracę i sprowadza proces organizacji pracy z niekompletnym repozytorium do poleceń:
git clone --filter=blob:none --sparse /twoje/repozytorium/tutaj repozytorium
git sparse-checkout ustaw /ścieżkę/do/check/outPolecenie sparse-checkout umożliwia ustawienie listy ścieżek do pobrania (set) bez konieczności ręcznego konfigurowania .git/info/sparse-checkout, a także wydrukowanie bieżącej listy ścieżek (list) oraz włączenie lub wyłączenie częściowych pobrań (enable/disable).
Aby zoptymalizować pracę z bardzo dużymi repozytoriami i listami szablonów, należy użyć ustawienia „", co ogranicza dozwolone wzorce (zamiast dowolnych wzorców .gitignore, możesz określić, czy wszystkie ścieżki i wszystkie pliki w danym podkatalogu powinny zostać wyewidencjonowane). Na przykład, jeśli duże repozytorium ma katalog "A/B/C", a cała praca jest skoncentrowana w podkatalogu "C", to gdy włączony jest tryb sparseCheckoutCone, polecenie "git sparse-checkout set A/B/C" wyewidencjonuje całą zawartość "C", ale z "A" i "B" wyewidencjonuje tylko części niezbędne do pracy z "C".
- Dokumentacja („git rebase -h”) usunęła wszelkie odwołania do opcji „--preserve-merges”, która została uznana za przestarzałą. Zamiast niej, w celu migracji zestawu zatwierdzeń, należy używać opcji „--preserve-merges”.".
- Aby poprawić czytelność wiadomości o poprawkach wysyłanych na listy mailingowe, dodano opcję „git format-patch --cover-from-description subject”, która, jeśli jest określona, używa pierwszego akapitu tekstu opisu gałęzi jako tematu listu przewodniego do zestawu poprawek.
- Wprowadzono obsługę łącznego użycia polecenia „git apply --3way” i ustawienia „merge.conflictStyle” („git apply” teraz bierze pod uwagę styl opisu konfliktu z merge.conflictStyle, gdy konieczne jest rozwiązanie konfliktu po próbie zastosowania pliku z poprawką do repozytorium).
- Kod definicji funkcji używany w operacjach takich jak „git diff/grep --show-function/--function-context” został rozszerzony o obsługę definiowania granic funkcji w programach napisanych w .
- Do poleceń „git add”, „git commit”, „git reset” i innych dodano nową opcję „--pathspec-from-file”, która umożliwia załadowanie listy ścieżek z pliku lub strumienia wejściowego, zamiast wyświetlania ich w wierszu poleceń.
- Naprawiono problem z wykrywaniem zmian nazw na poziomie katalogu podczas zapisywania zatwierdzeń. Wykrywanie nie działało, jeśli zawartość podkatalogu została przeniesiona do katalogu głównego repozytorium.
- Zaproponowano wstępną implementację przerobionego polecenia „git add -i”, które umożliwia interaktywne dodawanie zmodyfikowanej zawartości, przepisane z języka Perl na język C. Trwają również prace nad podobną przeróbką polecenia „git add -p”.
- Polecenie „git log --graph”, które generuje obraz ASCII grafu z historią zmian w repozytorium, zostało przebudowane. Przeróbka znacznie poprawiła i uprościła dane wyjściowe bez zniekształcania struktury historii, co na przykład rozwiązało problem z obrazem wykraczającym poza szerokość linii terminala.
- Opcja „git log --format=..” pozwala zmienić format wyjściowy,
Rozszerzono obsługę flag „l/L”, aby wyświetlać tylko część adresu e-mail określoną przed symbolem „@” (przydatne na przykład, gdy wszyscy programiści mają adresy e-mail w tej samej domenie). - Dodano podpolecenie „set-url” do polecenia „git submodule”.
- Zestawy testowe zostały zaktualizowane w ramach przygotowań do przejścia na
Algorytm skrótu SHA-2 zamiast SHA-1.
Źródło: opennet.ru
