Издаване на системата за управление на оригиналния текст Git 2.39

След две месеца разработка е публикувана версия 2.39 на дистрибуционната система за управление на изходни текстове Git. Git е една от най-популярните, надеждни и високо производителни системи за управление на версии, предлагаща гъвкави средства за нелинейна разработка, базирани на клонове и сливане на клонове. За осигуряване на целостта на историята и устойчивостта на промени с обратна дата се използва неявно хеширане на цялата предишна история с всяко комитиране, а също е възможно удостоверяване с цифрови подписи на разработчиците на отделни тагове и комити.

В сравнение с предишното издание, в новата версия са включени 483 промени, подготвени с участието на 86 разработчици, от които 31 участва за първи път в разработката. Основните нововъведения са:

  • В командата „git shortlog“, предназначена за показване на обобщения със статистика от историята на промените, е добавена опция „—group“ за произволно групиране на комитите по полета, не ограничени до автора или комитиращия. Например, за показване на списък на разработчиците с информация за броя на промените, включващи помощниците, споменати в полето „Co-authored-by“, може да се използва командата: git shortlog -ns —group=author —group=trailer:co-authored-by

    Вывод shortlog можно агрегировать при помощи спецификаторов форматирования и опция «—group» позволяет существенно упростить создание сложных отчётов и избавиться от выполнении дополнительных команд сортировки. Например, для создания отчёта с информацией о том, сколько коммитов для заданного релиза было принято в каждом месяце, можно указать: git shortlog v2.38.0.. —date=’format:%Y-%m’ —group=’%cd’ -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Раньше для выполнения аналогичной операции потребовалось бы привлечение утилит sort и uniq: git log v2.38.0.. —date=’format:%Y-%m’ —format=’%cd’ | sort | uniq -c

  • Разширените функции на механизма «cruft packs», предназначени за опаковане на недостъпни обекти, за които в репозиториума липсват връзки (не се ссылват нито клонове, нито тагове). Недостъпните обекти се премахват от сборщика на отпадъци, но преди изтриването остават в репозиториума за известно време, за да се избегнат състояния на състезание. Механизмът «cruft packs» позволява съхранението на всички недостъпни обекти в един pack-файл, а данните за времето на модифициране на всеки обект да се отразяват в отделна таблица, съхранявана в отделен файл с разширение «.mtimes», така че да не се пресичат с общото време на промяна.

    Времето на пребиваване на недостъпните обекти в репозиториума преди действителното изтриване се определя от опцията «—prune=<date>». Въпреки че забавянето преди изтриването е доста ефективен и практичен метод за предотвратяване на повреда в репозиториума поради състояние на състезание, то не е 100% надеждно. За да опрости възстановяването на повредени репозитории, в новото издание е предоставена възможност за запазване на липсващите обекти, за което в командата «git repack» е добавена опция «—expire-to», позволяваща задаването на файл за създаване на външна копия на всички изтривани обекти. Например, за запазване в файла backup.git на недостъпните обекти, които не са се променяли през последните 5 минути, може да се използва командата: git repack —cruft —cruft-expiration=5.minutes.ago -d —expire-to=..\/backup.git

  • Скоростта на изпълнение на операцията «git grep —cached» при търсене в области, в които се прилага частично клониране (sparse-checkout) и за които има частични индекси (sparse index), е значително увеличена (до 70%). По-рано при указване на опцията «—cached» първо се извършваше търсене в обикновения индекс, а след това в частичните, което водеше до значителни забавяния при търсене в големи репозитории.
  • Ускорено изпълнение на сървър проверки за свързаност на нови обекти преди тяхното поставяне в репозиториума при изпълнение на операцията «git push». Благодарение на преминаването към отчитане само на обявените връзки, в тестов репозиториум с 7 милиона връзки, от които само 3% са обхванати от операцията push, извършените оптимизации позволиха да се намали времето за проверка 4.5 пъти.
  • С цел да се защитим от потенциални цели числови препълвания в кода, в екипа на «git apply» е ограничен максималният размер на обработваните пачове. В случай, че размерът на пача надхвърли 1 ГБ, сега ще се показва грешка.
  • За защита от потенциални уязвимости са направени промени за почистване на излишна информация от заглавията, които се поставят при използване на модула h2h3 с опцията GIT_TRACE_CURL=1 или GIT_CURL_VERBOSE=1 в комбинация с HTTP/2.
  • При изпълнение на операция check out с клон, който е символичен линк към друг клон, командата «git symbolic-ref HEAD» сега извежда името на целевия клон, а не името на символичния линк.
  • Добавена е поддръжка на аргумента @{-1} в опцията «—edit-description» («git branch —edit-description @{-1}») за редактиране на описанието на предишния клон.
  • Добавена е командата «git merge-tree —stdin», която позволява предаване на списък с параметри чрез стандартния входен поток.
  • На мрежовите файлови системи по подразбиране е деактивиран обработчикът fsmonitor, който следи промените в ФС.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster