Git 2.28 z nowymi funkcjami i poprawkami
Właśnie wydano projekt open source Git 2.28. Nowa wersja zawiera kilka nowych funkcji oraz poprawki błędów. Poniżej opiszemy kilka najważniejszych zmian.
Opcja init.defaultBranch
Inicjując nowe repozytorium Git, korzystając z git init, program tworzył początkową gałąź o nazwie master. W nowej wersji wprowadzono opcję init.defaultBranch, która zastąpi wcześniejszą nazwę. Wartość nowej opcji domyślnie jest ustawiona na master. Warto pamiętać, że tą zmienną konfiguracyjną ustawia użytkownik. Nadpisanie wartości domyślnej polega na:
$ git config --global init.defaultBranch main
Ponadto nowa zmienna ma wpływ tylko na nowe repozytoria.
Poprawa wydajności – commit-graph
Kolejną zmianą jest poprawa wydajności przez optymalizację rozszerzenia formatu commit-graph. Format ten rozszerzono już we wcześniejszej wersji w celu przechowywania filtrów Blooma o zmienionej ścieżce. Plik commit-graph przechowuje informacje o zatwierdzeniach. W pewnym sensie jest pamięcią podręczną dla powszechnie używanych informacji o zatwierdzeniach – jakie jest drzewo główne, kim są rodzice itp. Oprócz tego zawiera obliczone informacje – numer generacji oraz filtry bloom o zmienionej ścieżce.
Warto wiedzieć, że Git przechowuje obiekty na dwa sposoby:
- jako luźny obiekt – zawartość obiektu przechowuje się w pojedynczym, unikalnym pliku dla obiektu na dysku,
- jako spakowany obiekt – obiekt jest złożony w skompresowany format pliku *.pack.
W przypadku pliku commit-graph wszystkie informacje są natychmiastowe. Przykładowo, dla danego zatwierdzenia C Git wie, gdzie dokładanie szukać w pliku graficznym zmian wszystkich przechowywanych pól. Dzięki temu oszczędza się sporo czasu na zwykłych operacjach Git.
Filtry Blooma w Git 2.28
Filtr Blooma to probabilistyczny zbiór, zestaw elementów, ale pytanie o istnienie w tym zbiorze elementu X odpowiada następująco:
- X może być w tym zestawie.
- X zdecydowanie nie ma w tym zestawie.
Jednak nigdy nie odpowie – X na pewno należy do tego zestawu.
Funkcja commit-graph przechowuje jeden z filtrów Bloom dla zatwierdzeń. Zapełnia on go listą ścieżek, które zmieniły się od tego commitu do pierwszego rodzica. Ogólnie działa to następująco – mając polecenie Git obliczające różnice, filtr Blooma pozwoli Gitowi pominąć w obliczeniach niektóre zatwierdzenia.