След два месеца разработка беше публикувано издание на разпределената система за контрол на изходните текстове Git 2.35. 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», използвана за предоставяне на Vim информация за точните преходи на исканата позиция в файла при решаване на конфликти от сливане, преглед на разликите или изпълнение на операция за търсене, е предоставена възможност за стесняване на обхвата на конфликтите от сливане. Например, за ограничаване на операциите само до директорията «foo» може да се зададе «git jump merge — foo», а за изключване на директорията «Documentation» от обработката — «git jump merge — ‘:^Documentation'».
- Извършена е работа по стандартизация на употребата на типа «size_t» вместо «unsigned long» за стойности, представляващи размерите на обектите, което позволява да се използват филтрите «clean» и «smudge» с файлове по-големи от 4 ГБ на всички платформи, включително на платформи с данни, базирани на модела 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
