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

Wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.56. Kod Git jest rozpowszechniany na licencji GPLv2+. W porównaniu do wcześniejszej wersji, nowa wersja przyjęła 748 zmian przygotowanych przez 104 programistów, z których 39 uczestniczyło w rozwoju Git po raz pierwszy. Główne innowacje (1, 2, 3):

  • Dodano tryb „git add —resolved” do rozwiązywania konfliktów podczas łączenia gałęzi, który sprawdza pliki pod kątem znaczników konfliktów i w przypadku wykrycia znacznika w przynajmniej jednym pliku zwraca błąd, nie indeksuje żadnego z plików oraz wyświetla listę plików wymagających poprawienia. W przeciwieństwie do polecenia „git add —update” w nowym trybie przetwarzane są tylko pliki znajdujące się w stanie konfliktu, a zmienione pliki niezwiązane z konfliktem są ignorowane, co pozwala na bezpieczne zakończenie łączenia gałęzi, nawet jeśli w katalogu roboczym znajdują się inne niezakończone poprawki (polecenie „git add —update” dodawało do indeksu wszystkie wcześniej śledzone zmienione pliki w katalogu roboczym).
  • Zdecydowanie przyspieszono pracę z dużymi repozytoriami dzięki optymalizacji algorytmu wyszukiwania ostatnich wspólnych commitów podczas łączenia gałęzi oraz porównywania commitów. W procesie pracy uwzględniane są teraz commit'y należące wyłącznie do jednej z gałęzi, co pozwala na zatrzymanie skanowania natychmiast po wykryciu wszystkich możliwych wspólnych przodków, nie tracąc czasu na dalsze przeszukiwanie historii zmian. W jednym z przetestowanych repozytoriów szybkość wyszukiwania wzrosła średnio 20 razy, a w innym przyspieszenie osiągnęło 70 razy. Wykonując polecenie „git merge-base —all v4.8 v4.9” w repozytorium z rdzeniem Linux liczba kroków przeszukiwania zmniejszyła się z 167 tysięcy do 3,8 tysiąca.
  • Do zastosowań serwerowych dostosowano tryb pakowania „—path-walk”, który pozwala na tworzenie bardziej kompaktowych plików pakietowych poprzez grupowanie obiektów według ich ścieżki w drzewie katalogów (na przykład dla repozytorium Fluent UI użycie „—path-walk” pozwoliło zmniejszyć rozmiar pliku pakietowego z 558 MB do 164 MB). W nowej wersji wprowadzono możliwość korzystania z trybu „—path-walk” wspólnie z bitmapami osiągalności (reachability bitmap) oraz wyspami delta (delta island), stosowanymi przez usługi hostingu Git w celu przyspieszenia działania i izolacji forków od głównego repozytorium.
  • Usunięto wąskie gardła, które prowadziły do nadmiernych obliczeń w dużych repozytoriach: usunięto zbędne sprawdzanie stanu plików przy zapisie do reftable; wykluczono ponowne skanowanie listy przy każdym wstawieniu nowego pliku pack; przyspieszono operacje z reftable, w których nagromadziło się wiele wpisów o usunięciu; zoptymalizowano działanie „git diff” przy określaniu ograniczeń dotyczących ścieżek plików. Po wprowadzeniu optymalizacji praca z reftable przy dużej liczbie usunięć przyspieszyła 65 razy (z 13 sekund do 0.2 sekundy), a wykonanie problematycznej komendy „git diff” w repozytorium Chromium z 500000 elementami w indeksie zajmuje teraz 0.07 sekundy zamiast 8 minut.
  • Do eksperymentalnej komendy „git history”, która oferuje możliwości przekształcania historii zmian, dodano operację „git history drop” do usuwania wybranego commita z automatycznym dołączeniem jego potomków do rodzicielskiego commita.
  • Dodano komendę „git branch —delete-merged ‘origin/*’ ‘topic-*'” do bezpiecznego usuwania grup lokalnych gałęzi, których zmiany zostały już przeniesione do zdalnego repozytorium. Do filtrowania gałęzi i repozytoriów dopuszcza się użycie masek. Aby przeanalizować kandydatów do usunięcia, bez faktycznego wykonania operacji, można użyć flagi „—dry-run.”
  • Dodano komendę „git refs create|update|delete|rename”, która łączy niskopoziomowe operacje do tworzenia, usuwania, zmieniania nazw i aktualizowania odniesień.
  • Do komendy „git bisect run” dodano opcję „—reset-when-found=[]”, która automatycznie przywraca repozytorium do stanu przed rozpoczęciem poszukiwania lub pozostawia aktywny problematyczny commit, bez potrzeby oddzielnego uruchamiania komendy „git bisect reset.”
  • Do komendy „git replay” dodano flagę „—linearize” do użycia płaskiej topologii scalania, podobnie jak w „git rebase —no-rebase-merges”, ale bez odwoływania się do drzewka roboczego.
  • W komendzie „git log —follow” zaimplementowano śledzenie zmiany nazw plików w nieliniowej historii zmian, na przykład przy scalaniu podgałęzi. Ścieżka do pliku jest teraz rejestrowana oddzielnie dla każdego rodzicielskiego commita, co czyni wynik niezależnym od kolejności przeszukiwania historii commitów.
  • Dodano poprawne zastosowanie polecenia „git repack -a —filter=blob:limit=1m —drop-filtered” do usuwania dużych obiektów blob, wczytywanych na żądanie z zewnętrznego repozytorium i nieużywanych w bieżącym indeksie. Przy dalszym dostępie do tych obiektów, zostaną one automatycznie załadowane ponownie.
  • W poleceniu „git log —graph” dla grafów z wieloma niezależnymi korzeniami dodano wcięcia, aby wizualnie oddzielić niepowiązane commity.
  • Zidentyfikowano typowe literówki, takie jak „git push origin/main” zamiast „git push origin main” lub „git branch —set-upstream-to origin main” zamiast „git branch —set-upstream-to=origin/main”, oraz wyświetlono podpowiedź do użycia poprawnej wersji.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster