wydanie rozproszonego systemu zarządzania tekstami źródłowymi . 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 do poprzedniego wydania w nową wersję wprowadzono 544 zmiany, przygotowane przy udziale 78 deweloperów, z których 21 wzięło udział w rozwoju po raz pierwszy. :
- Dodano wsparcie dla makr konfiguracyjnych, dzięki którym można szybko przełączać się między różnymi zestawami ustawień, nie zagłębiając się w szczegóły związane z konkretnymi opcjami. Przy pomocy makr nie ma potrzeby zapamiętywania, które dokładnie ustawienia należy zmienić, aby aktywować daną funkcjonalność. Na przykład, w przypadku spowolnienia działania z dużym repozytorium, może być konieczne przejście na nowy mechanizm indeksowania, włączenie kompresji prefiksów ścieżek i aktywowanie pamięci podręcznej nieśledzonych plików, ustawiając parametr index.version na wartość 4 i aktywując core.untrackedCache. Makra pozwalają zaoszczędzić czas na szukanie odpowiedniego rozwiązania w dokumentacji, a od razu aktywować ustawienia z optymalizacjami dla repozytoriów z dużą liczbą plików:
git config feature.manyFiles true
- Domyślnie włączone jest przechowywanie obiektów w formie grafu commitów (commit-graph), w którym do indeksowania używana jest nie liniowa lista haseł obiektów z odniesieniami do innych obiektów, ale struktura w formie grafu. Jeśli wcześniej dla określenia wydań, w których zawarte jest konkretne poprawienie, wymagana była загрузка każdego obiektu z dysku w celu wyszukiwania odniesień, to przy przechowywaniu w formie grafu można od razu określić wszystkie niezbędne powiązania. Przejście na przechowywanie w formie grafu commitów w repozytoriach jądra Linux i Git pozwoliło osiągnąć prawie dwukrotny wzrost wydajności operacji z gałęziami. Aby aktywować nową metodę przechowywania po aktualizacji do Git 2.24, należy wykonać polecenie „git gc”.
W ramach zmian związanych z commit-graph wprowadzono ujednolicenie sposobu wyświetlania wskaźnika postępu w powiązanych z commit-graph poleceniach („git commit-graph write”, „git commit-graph verify” itp.). Wskaźnik postępu jest teraz domyślnie wyświetlany tylko dla terminala (aby zmienić to zachowanie, należy użyć opcji „-[no-]progress”). Dodatkowo dodano nowy parametr konfiguracyjny fetch.writeCommitGraph, który włącza automatyczne aktualizowanie pliku grafu commitów w trakcie operacji „git fetch” (wszystkie pobierane z zewnętrznych repozytoriów commity będą od razu trafiać do commit-graph bez konieczności uruchamiania auto-gc).
- Dodano polecenie do przepisania historii zmian — „„, które stanowi prostszą alternatywę dla polecenia „” do wykonywania operacji na historii zmian w repozytorium (na przykład usuwanie pliku z repozytorium lub wyciąganie historii zmian z określonego katalogu). Aby zwiększyć wydajność, zamiast uporządkowanej analizy po commitach w „git filter-repo” operacje wykonywane są na prezentacji historii w formie ciągłego strumienia.
Filtrowanie historii realizowane jest za pomocą opcji „-path-{glob,regex}”, która umożliwia stosowanie zarówno prostych masek, jak i wyrażeń regularnych. Dostępne są również opcje do przeprowadzania operacji „znajdź i zamień” lub czyszczenia binarnych obiektów, których rozmiar przekracza określony limit. Każdy przepisany commit otrzymuje nowy identyfikator haszujący SHA-1, a wszystkie odniesienia do zastąpionego commita są aktualizowane zgodnie z nowym identyfikatorem.
Aby uzyskać podsumowanie z danymi statystycznymi o repozytorium (liczba obiektów według typów, największe pliki i katalogi, jakie rozszerzenia zajmują najwięcej miejsca na dysku itp.), dostępna jest opcja „-analyze”. W celu rozszerzenia funkcjonalności istnieje możliwość podłączenia dowolnych callbacków w języku Python, przez które można zarówno tworzyć nowe podkomendy, jak i obsługiwać różne zdarzenia (na przykład nowe typy plików).
- Dodano opcję „—end-of-options”, która pozwala oddzielić opcje od nazw odnośników, które mogą zaczynać się od symbolu „-” i być interpretowane jako opcje („git log —end-of-options —super-dangerous-option”). W codziennym użytku takie nazwy można zeskauować jako „git log ‘refs/heads/—super-dangerous-option'”, jednak w skryptach mogą wystąpić problemy z określeniem przestrzeni nazw. Powszechnie stosowany separator „—” w tym przypadku nie jest zastosowalny, ponieważ już jest używany do oddzielania nazw odnośników od plików (np. „git log —end-of-options —super-dangerous-option ^master — path/to/file”);
- Do 'git rebase —rebase-merges' dodano opcje „—strategy” i „—strategy-option” do wyboru ;
- Dodano nowy handler „.git/hooks/pre-merge-commit”, wywoływany po wykonaniu scalania, ale przed zapisaniem wynikowego zatwierdzenia;
- Do silnika autouzupełniania poleceń dodano wsparcie dla uzupełniania zmiennych konfiguracyjnych w powiązaniu z ustawieniami konkretnych poleceń.
Na przykład, kiedy trzeba wpisać „git -c core.autocrlf=false add path/to/my/file”, ale nie pamiętając dokładnej nazwy zmiennej „core.autocrlf”, można nacisnąć Tab, aby uzyskać sugestię.
Ponadto, deweloperzy Git kodeks zachowania uczestników projektu, określający podstawowe zasady rozwiązywania sytuacji konfliktowych. Dokument oparty jest na zaleceniach „„, stosowanych w wielu projektach open-source, w tym w jądrze Linux, Eclipse, Freedesktop, GitLab, Ruby i Kubernetes. Dokument definiuje równe możliwości dla wszystkich uczestników, niezależnie od ich światopoglądu, wieku, płci, przekonań religijnych, poziomu wykształcenia, statusu społecznego i narodowości. Wspólnota sprzyja przyjaznej formie komunikacji, zrozumieniu, współczuciu dla problemów innych uczestników, przyjmowaniu konstruktywnej krytyki oraz podejmowaniu najlepszych decyzji dla całej społeczności. Niedopuszczalne są trollowanie, obraźliwy sposób komunikacji, próby poniżania, molestowania, naruszania prywatności, ujawniania danych osobowych oraz inne działania, które mogą być uznane za niewłaściwe w profesjonalnej komunikacji.
Źródło: opennet.ru
