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

Opublikowano wydanie rozproszonego systemu zarządzania kodem źródłowym Git 2.48. Git wyróżnia się wysoką wydajnością i oferuje narzędzia do nieliniowego rozwoju, oparte na gałęzi i scalaniu. Aby zapewnić integralność historii i odporność na zmiany „wsteczne”, używane jest niejawne haszowanie całej wcześniejszej historii w każdym commicie oraz weryfikacja cyfrowymi podpisami poszczególnych tagów i commitów. Kod Git jest rozpowszechniany na licencji GPLv2+.

W porównaniu do poprzedniej wersji, nowa wersja zawiera 605 zmian, przygotowanych przez 93 deweloperów, z których 35 uczestniczy w rozwoju po raz pierwszy. Główne nowości to:

  • Wprowadzono możliwość budowy za pomocą systemu budowy Meson, obok GNU Make i CMake. Do budowy Git można teraz użyć polecenia „meson setup build && ninja -C build”. Zauważono, że Makefile używany z GNU Make urósł do 3887 linii i nie jest tak prosty, jak by się chciało. Narzędzie Meson upraszcza pracę z systemem budowy, jest wygodne do budowy międzyplatformowej i czyni proces budowy bardziej dostępnym dla początkujących lub deweloperów bez doświadczenia w korzystaniu z narzędzia Make. Nie planuje się zaprzestania wsparcia dla Make i CMake w najbliższej przyszłości.
  • Dodano opcje budowy, które umożliwiają użycie alternatywnych implementacji hasha SHA-1 przy obliczaniu sum kontrolnych, używanych do weryfikacji integralności bloków danych w plikach pakietów. Wydajność obliczania sum kontrolnych ma duże znaczenie; na obliczenie ich podczas klonowania repozytorium z jądrem Linux przeznacza się około 78% czasu procesora. Domyślna implementacja zawiera dodatkowe sprawdzenia kolizji i ochronę przed atakami na SHA-1, takimi jak SHAttered i Shambles. Tego rodzaju ochrona, zużywająca dodatkowe zasoby, ma sens tylko przy użyciu SHA-1 w celach kryptograficznych i jest zbędna przy weryfikacji integralności danych indeksowych.

    Dla kompilacji Gita z szybszą realizacją SHA-1, która nie jest odpowiednia do zastosowań kryptograficznych, zaproponowano szereg opcji *_UNSAFE, na przykład „OPENSSL_SHA1_UNSAFE”. W GitHub kompilacja z uproszczonym SHA-1 pozwoliła na zwiększenie wydajności operacji pobierania i klonowania danych o 10-13%.

  • Dodano możliwość użycia w poleceniu „range-diff” opcji „—remerge-diff”, która pozwala na pokazanie różnic między wspólnym wynikiem scalania a rzeczywistymi danymi odzwierciedlonymi w commicie po przetworzeniu polecenia „merge”. Przy użyciu opcji „—remerge-diff” różnice między rozwiązaniami konfliktów nie są rozdzielane dla każdej rodzicielskiej gałęzi, lecz pokazywane są ogólne różnice między plikiem z konfliktami scalania a plikiem, w którym konflikty zostały rozwiązane. W kontekście polecenia „range-diff” nowa opcja może być przydatna do porównania zestawów commitów po przeniesieniu sekwencji commitów poleceniem „rebase” z opcją „—rebase-merges”.
  • Dodano możliwość uruchomienia zestawu testowego Gita z włączonym trybem wykrywania wycieków pamięci. Ponieważ git zapewnia narzędzia, które kończą działanie po wykonaniu wywołanej funkcji, wcześniejsze wycieki pamięci nie były traktowane jako poważny problem. Konieczność całkowitego wykluczenia wycieków pamięci stała się aktualna po rozpoczęciu pracy nad wydzieleniem wewnętrznej funkcjonalności do osobnej biblioteki, która może być stosowana w długotrwałych procesach.
  • Rozpoczęto tworzenie listy przestarzałych trybów i możliwości, których wsparcie planowane jest do zakończenia w przyszłości. Uważa się, że usunięcie przestarzałej funkcjonalności nastąpi w wydaniu Git 3.0, które wprowadzi zmiany naruszające zgodność wsteczną.
  • Kontynuowano optymalizację działania polecenia „git for-each-ref”, które wyświetla listę odniesień w repozytorium. Optymalizacja, łącząca przetwarzanie filtrów do odniesień i formatowania wyjścia, jest teraz stosowana nie tylko dla nieposortowanego wyjścia, ale także przy podaniu opcji „—sort”.
  • Ulepszona realizacja backendu „reftable” z blokowym magazynem dla efektywnego przechowywania w repozytorium linków do gałęzi i tagów. Reftable znacząco przyspiesza wyszukiwanie, odczyt i zapis w repozytoriach z bardzo dużą liczbą linków. W nowej wersji zaprzestano korzystania z niektórych pomocniczych API w celu dalszego wyłączenia biblioteki libgit z wymagań kompilacyjnych. Wprowadzono adaptacyjną obsługę błędów zwracanych przez funkcje alokacji pamięci (brak pamięci już nie prowadzi do awaryjnego zakończenia działania). Przyspieszono operacje tworzenia linków i zmniejszono zużycie pamięci.
  • W implementacji częściowego klonowania rozwiązano problemy, które prowadziły do ​​zapętlenia i uszkodzenia repozytoriów po wykonaniu polecenia „git gc”.
  • Podczas wykonywania polecenia „git fetch ” w przypadku braku na systemie lokalnym „refs/remotes//HEAD” oraz istnienia po stronie zdalnej gałęzi, do której odnosi się HEAD, „refs/remotes//HEAD” jest teraz przekierowywane na tę gałąź. Aby zarządzać synchronizacją „refs/remotes//HEAD” ze wartością HEAD po zdalnej stronie, dodano ustawienie remote..followRemoteHEAD.
  • Dodano ustawienie „remote..serverOption” analogiczne do opcji wiersza poleceń „—serverOption=”.
  • W poleceniu „git rebase —rebase-merges” zapewniono, że z nazw gałęzi są używane jako etykiety tam, gdzie to możliwe.
  • Do poleceń ‚git notes add’ i ‚git notes append’ dodano flagę ‚-e’, która otwiera notatkę w zewnętrznym edytorze tekstu wskazanym przez zmienną środowiskową GIT_EDITOR.
  • Ulepszona zgodność z GCC 15 i standardem C23.
  • Zaprzestano wsparcia dla starych wersji libcURL i Perl.

Ź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