Po trzech miesiącach pracy opublikowano wersję 2.44 rozproszonego systemu zarządzania kodem źródłowym Git. Git jest jednym z najpopularniejszych, niezawodnych i wydajnych systemów kontroli wersji, oferując elastyczne narzędzia do nieliniowego rozwoju, oparte na gałęziowaniu i scalaniu. Aby zapewnić integralność historii i odporność na zmiany „wstecz” wykorzystuje się niejawne haszowanie całej poprzedniej historii w każdym commicie, możliwe jest również uwierzytelnienie cyfrowymi podpisami poszczególnych tagów i commitów przez programistów. Kod Git jest udostępniany na licencji GPLv2+.
W porównaniu do poprzedniej wersji, do nowej wersji wprowadzono 503 zmian, przygotowanych przez 85 programistów, z których 34 po raz pierwszy wzięło udział w rozwoju. Główne nowości to:
- Dodano nowe polecenie „git replay”, które może być stosowane jako alternatywa dla „git rebase” i używane do odtwarzania historii na serwerze bez drzewa roboczego (bare-repo, które nie zawiera drzewa roboczego), obróbki jednocześnie wielu gałęzi, wykonywania operacji rebase dla gałęzi innych niż te, które są aktualnie wyodrębnione, lub po prostu do przyspieszania operacji scalania.
- Dodano wsparcie dla systemu ciągłej integracji GitLab CI.
- Do poleceń „git add” i „git stash” dodano wsparcie dla atrybutów ścieżek „:(attr:…)”, definiowanych analogicznie do polecenia „git show”. Na przykład „git add ‘:(attr:~binary)'” można użyć do dodania wszystkich plików tekstowych (nie binarnych) do indeksu. Dodatkowo w nowym wydaniu wprowadzono atrybut „builtin_objectmode” do filtrowania ścieżek plików według praw dostępu. Na przykład „git add ‘:(attr:builtin_objectmode=100755)'” można użyć do dodania wszystkich plików wykonywalnych.
- Dodano wsparcie dla ponownego użycia obiektów rozłożonych na wiele plików pack, dla których istnieje zbiorczy indeks (multi-pack-index) z danymi o dostępności obiektów (optymalizacja, która pozwala odwoływać się do użycia danych, które są już obecne w plikach pack, zamiast ich faktycznego przekazywania). Od wersji 2.44 git potrafi przetwarzać ponowne użycie obiektów z wielu plików pack, bez konieczności ponownego pakowania repozytorium w jeden plik pack. Aby włączyć nową funkcję, należy wykonać polecenia: git config —global pack.allowPackReuse multi git multi-pack-index write —bitmap
Po tym liczba plików pack, z których ponownie używane są obiekty, może być śledzona w wartości „pack-reused … (from N)”, wyświetlanej przy wykonywaniu „git push”.
- Polecenie „git rebase —autosquash” może teraz być stosowane do operacji rebase w trybie nieinteraktywnym, co pozwala na szybkie zastosowanie poprawek fixup bez przeglądania listy zmian i bez zmiany zmiennej środowiskowej GIT_SEQUENCE_EDITOR.
- Do polecenia „git merge-file” dodano opcję „—diff-algorithm” do wyboru alternatywnego algorytmu oceny różnic między plikami.
- W poleceniu „git checkout -B []” zabroniono aktualizacji i pobierania gałęzi, które używają innego drzewa roboczego. Aby przywrócić starą funkcjonalność, dodano opcję „—ignore-other-worktrees”.
- Dodano możliwość przypisania ustawieniu „git config advice.pushAlreadyExists” wartości „true”, co usuwa podczas wyświetlania podpowiedzi instrukcję dotyczącą ich wyłączenia („Wyłącz tę wiadomość za pomocą…”), zajmującą miejsce na ekranie.
- Optymalizacja wykonania polecenia „git for-each-ref” z opcją „—no-sort”, która teraz prowadzi do wyjścia w nieokreślonym porządku (wcześniej przy użyciu „—no-sort” mimo wszystko stosowano sortowanie alfabetyczne). Po wprowadzeniu optymalizacji zastosowanie „—no-sort” przyspiesza „git for-each-ref” o około 20% w repozytoriach z dużą liczbą odnośników.
- W backendzie zarządzania poświadczeniami wincred dodano wsparcie dla aktualizacji tokenów OAuth, analogicznie do tego, jak to realizowane jest w backendach credential-cache i credential-libsecret.
- W „git fetch” dodano wsparcie dla parametru konfiguracyjnego „fetch.all”, który będzie obsługiwany analogicznie do dodania opcji „—all” w wierszu poleceń.
Źródło: opennet.ru
