След като бяха извършени два месеца разработки, бе публикувана версия 2.35 на разпределената система за управление на изходния код Git. Git е една от най-популярните, надеждни и високоефективни системи за управление на версиите, предоставяща гъвкави средства за нелинейна разработка, основана на клонове и сливане на клонове. За да се осигури целостта на историята и устойчивостта на промени „задна дата“, се използва неявно хеширане на цялата предходна история във всеки комит, а също така е възможно удостоверяване с цифрови подписи на отделни тагове и комити от разработчиците.
В сравнение с предишната версия, новата версия приеме 494 изменения, подготвени с участието на 93 разработчици, от които 35 участват в разработката за първи път. Основните нововъведения са:
- Разширени са възможностите за използване на SSH-ключове за подписване на Git-обекти с цифрова подпис. За да се разграничат времевите рамки на действие на няколко ключа, е добавена поддръжка на OpenSSH директивите „valid-before“ и „valid-after“, които позволява правилна работа с подписите след ротацията на ключа на един от разработчиците. Преди това, възникваше проблем с разграничаването на подписите с новия и стария ключ — ако старият ключ бъде изтрит, не може да се провери подписите, направени с него, а ако бъде оставен — ще остане възможност за създаване на нови подписи с него, въпреки че е сменен. С помощта на valid-before и valid-after може да се раздели областта на действие на ключовете на базата на времето на създаване на подписа.
- В настройката merge.conflictStyle, която позволява избор на режим на представяне на информацията за конфликти при сливане, бе добавена поддръжка на режима „zdiff3“, който премества всички стандартни редове, посочени в началото или края на конфликта, извън областта на конфликта. Това позволява постигането на по-компактно представяне на информацията.
- В командата «git stash» е добавен режим «—staged», който позволява да се скрият само измененията, добавени в индекса, например в ситуации, когато е необходимо временно да се отложат част от сложните изменения, за да може първо да се добави това, което вече е готово, а с останалото да се разберат нещата по-късно. Режимът напомня на командата «git commit», която записва само измененията, поставени в индекса, но вместо да създаде нов комит в «git stash —staged», резултатът се запазва в временната област stash. След като измененията станат необходими, те могат да се върнат с командата «git stash pop».
- В командата «git log» е добавен нов формат «—format=%(describe)», който позволява да се комбинира изходът на «git log» с резултата от изпълнението на командата «git describe». Параметрите за «git describe» се определят директно в спецификатора («—format=%(describe:match=,exclude=)»), в който също могат да се включат съкратени тагове («—format=%(describe:tags=)») и да се настрои числото на шестнадесетичните символи за идентификация на обектите («—format=%(describe:abbrev=)»). Например, за извеждане на последните 8 комита, таговете на които нямат метка кандидат за версии, и указание за 8-символни идентификатори, може да се използва командата: $ git log -8 —format='%(describe:exclude=-rc*,abbrev=13)' v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
- В настройката user.signingKey е реализирана поддръжка на нови типове ключове, не ограничаващи се до типа «ssh-» и указването на пълния файлов път до ключа. Алтернативните типове се задават с префикса «key::», например «key::ecdsa-sha2-nistp256» за ECDSA ключове.
- Забелязано е значително повишаване на скоростта на генериране на списъка с изменения в режим «—histogram», а също и при използване на опцията «—color-moved-ws», която контролира оцветяването на интервалите в цветния diff.
- В командата «git jump», използвана за предоставяне на информация за точните преминавания в исканата позиция в файла при разрешаване на конфликти при сливане, преглед на разликите или извършване на операция по търсене, е предоставена възможност за стесняване на обхвата на конфликтите при сливане. Например, за ограничаване на операциите само в каталога «foo» може да се укаже «git jump merge — foo», а за изключване от обработката на каталога «Documentation» — «git jump merge — ‘:^Documentation'».
- Извършена работа за стандартизиране на употребата на типа «size_t» вместо «unsigned long» за стойности, представляващи размерите на обектите, което позволява прилагането на филтри «clean» и «smudge» с файлове, по-големи от 4 GB на всички платформи, включително платформи с LLP64 модел на данни, където типът «unsigned long» е ограничен до 4 байта.
- В командата «git am» добавена опция «—empty=(stop|drop|keep)», която позволява при анализ на пачове от пощенската кутия да се избере поведението за празни съобщения, които не съдържат пачове. Стойността «stop» ще прекрати целия процес на прилагане на пачове, «drop» — ще пропусне празния пач, «keep» — ще създаде празен комит.
- В командите «git reset», «git diff», «git blame», «git fetch», «git pull» и «git ls-files» добавена поддръжка на частични индекси (sparse index), което позволява повишаване на производителността и спестяване на място в хранилищата, където се извършват операции за частично клониране (sparse-checkout).
- Обявена за остаряла командата «git sparse-checkout init», вместо която трябва да се използва «git sparse-checkout set».
- Добавена е начална реализация на новия бекенд «reftable» за съхранение на референции, като клонове и тагове, в хранилището. Новият бекенд използва блочно хранилище, прилагано от проекта JGit и оптимизирано за съхранение на много голям брой референции. Бекендът все още не е интегриран със системата за референции (refs) и не е готов за практическо приложение.
- Цветовата палитра на командата «git grep» е приведена в съответствие с утилитата GNU grep.
Източник: opennet.ru
