Wydanie rozproszonego systemu kontroli źródła Git 2.22

Przesłane przez wydanie rozproszonego systemu kontroli źródła Git 2.22.0. Git to jeden z najpopularniejszych, niezawodnych i wydajnych systemów kontroli wersji, zapewniający elastyczne narzędzia do nieliniowego programowania oparte na rozgałęzianiu i łączeniu. Aby zapewnić integralność historii i odporność na zmiany wsteczne, w każdym zatwierdzeniu stosowane jest ukryte haszowanie całej poprzedniej historii, możliwe jest także certyfikowanie poszczególnych tagów i zatwierdzeń cyfrowymi podpisami programistów.

W porównaniu do poprzedniej wersji, nowa wersja zawierała 745 zmiany, przygotowane przy udziale 74 programistów, z czego 18 wzięło udział w tworzeniu po raz pierwszy. Głównym innowacje:

  • Dostępny od wersji 1.18, nowy tryb zatwierdzania rebase „git rebase --rebase-merges” zastępuje starą opcję „--preserve-merges”, która jest obecnie przestarzała. Operacja „git rebase” służy do zastąpienia serii zatwierdzeń nowym zatwierdzeniem bazowym, na przykład w celu przeniesienia oddzielnej gałęzi opracowującej jakąś nową funkcję do bieżącego stanu gałęzi głównej, która obejmuje poprawki dodane po gałęzi :

    o - o - o (moja-funkcja)

    /

    o - o - o - o - o (mistrz)

    o - o - o (moja-funkcja)

    /

    o - o - o - o - o (mistrz)

    Aby zachować strukturę gałęzi w migrowanej gałęzi, można było wcześniej użyć opcji „--preserve-merges”, która po uruchomieniu w trybie interaktywnym (git rebase -i --preserve-merges) umożliwiała edycję historii zatwierdzeń, ale nie gwarantowało całkowitego zachowania struktury repozytorium. Nowy tryb „--rebase-merge” pozwala zachować strukturę zmian w migrowanej gałęzi, zapewniając jednocześnie pełen zakres interaktywnych operacji, w tym usuwanie, przegrupowywanie i zmiana nazwy zatwierdzeń.

    Na przykład „--rebase-scala” pozwala on ponownie prześlij zatwierdzenia z oddzielnej gałęzi do nowszej gałęzi głównej, zachowując strukturę gałęzi w migrowanej gałęzi i na bieżąco wprowadzaj pewne zmiany w notatkach zatwierdzeń.

  • Dodano obsługę tworzenia nowej gałęzi na podstawie wyniku określenia podstawy scalania dwóch innych gałęzi (podstawa scalania, powiązanie ze wspólnym przodkiem) przy użyciu konstrukcji „git gałąź nowy A...B” i „git checkout -b nowy A…B”, w którym „A…B” obejmuje zdefiniowanie podstawy scalania pomiędzy dwoma określonymi zatwierdzeniami, podobnie jak „git checkout A…B” przesuwa HEAD do zatwierdzenia podstawowego, a „diff A. ..B” pokazuje zmiany pomiędzy zatwierdzeniem „B” i tym samym, co zatwierdzenie „A” „Ancestor.

    Na przykład, pracując na osobnej gałęzi my-feature, można użyć tej funkcji, gdy chcesz zacząć od innej gałęzi, na przykład z tego samego miejsca w gałęzi master, z której została wypisana gałąź my-feature. Poprzednio wymagało to ręcznego sprawdzenia dziennika zmian, co było niewygodne, jeśli miałeś długą historię zmian, a następnie uruchomienia „git merge-base master moja-feature” w celu obliczenia skrótu bazy scalającej między gałęziami master i my-feature i utworzenie nowej gałęzi względem wspólnego przodka „git Branch my-other-feature hash”. W Git 2.22 możesz użyć składni „git Branch moja-inna-funkcja A...B”, aby utworzyć gałąź w stosunku do podstawy scalania dwóch innych gałęzi;

  • Dodano opcję „git Branch --show-current” wyświetlającą nazwę oddziału uzyskaną podczas operacji kasowania;
  • Dodano opcję „git checkout —no-overlay — dir”, która pozwala podczas wykonywania operacji checkout sprowadzić zawartość katalogu dir do postaci w pełni odpowiadającej stanowi gałęzi master. Na przykład, jeśli w lokalnej kopii katalogu dir znajduje się plik, który nie znajduje się w gałęzi master, to domyślnie podczas wykonywania „git checkout master - dir” zostanie on pozostawiony, a jeśli „--no-overlay ” zostanie podana opcja, zostanie usunięta;
  • Polecenie „git diff” wykorzystuje uniwersalny interfejs API do analizowania opcji, co umożliwia ujednolicenie obsługi opcji z innymi narzędziami git. Na przykład w „git diff” wszystkie opcje mają teraz swoich antagonistów („--function-context” i „--no-function-context”);
  • Dodano możliwość filtrowania rozszerzonych tagów dołączonych do zatwierdzeń w wynikach „git log” („trailer” - dodatkowe flagi informacyjne, takie jak Podpisany przez i Współautor). Możliwe jest filtrowanie etykiet zarówno według klucza, jak i wartości, na przykład:
    "git log --pretty="%(trailers:key=Recenzowane przez,tylko wartość)";

  • Dodano nowy silnik śledzenia, Trace2, oferujący bardziej elastyczny i uporządkowany format wyjściowy. Trace2 umożliwia zbieranie danych telemetrycznych o wykonanych operacjach i danych dotyczących wydajności w celu bardziej szczegółowej analizy i debugowania (program obsługi jest przypisywany przez użytkownika, żadne dane nie są wysyłane na zewnątrz);
  • Uczyniono bardziej czytelnym raport „git bisect”, w którym problematyczne zatwierdzenia są teraz wyraźniej podświetlane i wyświetlane są zbiorcze statystyki zmian dla każdego pliku (na poziomie liczby zmienionych linii);
  • Heurystyka określania zmian nazw katalogów została przerobiona, aby wyeliminować fałszywą instalację etykiet zmiany nazw. W razie wątpliwości takie katalogi są teraz oznaczane jako sprzeczne;
  • Przy próbie zainstalowania tagu w innym tagu pojawia się ostrzeżenie, co zwykle dzieje się przez pomyłkę i może prowadzić do ustawienia tagu na niewłaściwym zatwierdzeniu (na przykład konstrukcja typu „git tag -f -m „zaktualizowana wiadomość” my-tag1 my-tag2″ spowoduje utworzenie tagu na starym tagu, podczas gdy twórca spodziewał się, że nowy tag zostanie zainstalowany w zatwierdzeniu wskazanym przez stary tag);
  • Generowanie jest włączone dla repozytoriów bitmap (oparta na dysku struktura „bitmap osiągalności”), które przechowują dane o zestawach obiektów dostępnych dla każdego zatwierdzenia i pozwalają szybko określić obecność obiektu bazowego. Struktura ta znacząco skraca czas wykonania operacji pobierania danych (git fetch).

Źródło: opennet.ru

Dodaj komentarz