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

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

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

  • Добавена е командата „git maintenance“, която позволява извършването на периодични задачи на системи, които не поддържат cron. Например, с новата команда може да се организира периодично стартиране на процеса по опаковане на репозитория, за да не се чака завършването на блокирането на репозитория при автоматичното извършване на опаковане при стартиране на различни команди. Командата „git maintenance“ позволява извършването на оптимизации и операции за поддържане на оптималната структура на репозиторията на заден план, без да се блокира интерактивната сесия — на всеки час се извършва работа по предиво натоварване на свежи обекти от отдалечения репозиторий и актуализиране на файла с графа на комитите, а всяка нощ се стартира процес по опаковане на репозитория.
  • Добавена е поддръжка на водене на обратен индекс (revindex) на диска за pack-файлове. Напомняме, че Git съхранява всички данни под формата на обекти, които се разполагат в отделни файлове. За да се подобри ефективността при работа с репозитория, обектите се поставят допълнително в pack-файлове, в които информацията е представена под формата на поток от обекти, следващи един след друг (аналогичен формат се използва при предаване на обекти с командите git fetch и git push). За всеки pack-файл се създава индексен файл (.idx), който позволява бързо определяне на отместването в pack-файла по идентификатора на обекта, по който се съхранява този обект. Предложеният в Git 2.31 обратен индекс (.rev) е насочен към оптимизиране на процеса на определяне на идентификатора на обекта по информация за разположението на обекта в pack-файла.

    По-рано такова трансформация се изпълняваше на момента по време на парсване на pack-файла и се съхраняваше само в паметта, което не позволяваше повторно използване на подобни индекси и принуждаваше генерирането на индекс всеки път. Операцията за изграждане на индекс се свежда до построяване на масив от двойки "обект-позиция" и тяхната сортировка по позиция, което може да отнема много време за големи pack-файлове.

    Например, операцията за извеждане на съдържанието на обекти, при която се използва директен индекс, се изпълняваше 62 пъти по-бързо, отколкото операцията за показване на размера на обектите, за която данните за връзката на позицията с обекта не бяха индексирани. След използването на обратен индекс, посочените операции започнаха да отнемат приблизително едно и също време. Обратните индекси също позволяват да се ускорят операциите по изпращане на обекти при изпълнение на командите fetch и push благодарение на директното предаване на вече готови данни от диска. По подразбиране обратните индекси не се създават, за тяхната генерация трябва да се активира настройката "git config pack.writeReverseIndex true" с последващо опаковане на репозитория с команда "git repack -Ad".

  • Добавени са оптимизации на производителността, базирани на появата на файловия формат commit-graph, който се използва за оптимизация на достъпа до информация за комитите, нови данни за номера на генерация на комита, които могат да се използват за ускоряване на допълнителни операции с комити.
  • Разширени са възможностите за преопределяне на името на основната клонка, използвана по подразбиране в новите репозитории (настройка init.defaultBranch). При достъп до външни репозитории git се опитва да извлече клонката, на която сочи HEAD, т.е. ако външният сървър използва по подразбиране клонката "main", операцията "git clone" ще се опита локално да извлече "main". В Git 2.31 поддръжката за такова извлечение вече е реализирана и за празни репозитории. Например, при локално клониране на нов репозиторий преди добавяне на първите патчове, локалната копия сега ще съдържа зададеното на външния сървър име на основната клонка по подразбиране.
  • В командата "git rev-list" е добавена опция "—disk-usage", позволяваща извеждане на обобщени данни за размера на обектите.
  • В очакване на предстоящата замяна на бекенда за изпълнение на сливания, значително е оптимизирано определението на преименования.
  • Поддръжката на остарялата библиотека за регулярни изрази PCRE1 е прекратена.
  • Предоставена е възможност за принудително забраняване на използването на съкратени линкове, което действа независимо от алгоритъма за хеширане. Забраната се включва чрез задаване на стойност «no» на параметъра core.abbrev.
  • В командата «git rev-parse» е добавена опцията «—path-format=(absolute|relative)» за явно определяне на изхода на относителни или абсолютни пътища.
  • В скриптовете за автоматично допълване на входа в Bash е опростено добавянето на правила за допълнение за собствени подкоманди «git».
  • В командата «git bundle» е добавена опцията «—stdin» за четене на линкове от стандартния вход.
  • В командата «git log» е добавена нова опция «—diff-merges=».
  • В командата «git ls-files» е добавена опция «—deduplicatecan» за премахване на дубликати при изхода.
  • Добавени са нови маски за изключване на диапазони от комити — «^!» и «^-».
  • В командата «git range-diff» са добавени опции «—left-only» и «—right-only» за показване само на едната страна на сравнявания диапазон.
  • В командите «git diff» и «git log» са добавени опции «—skip-to=» и «—rotate-to=» за пропускане или преместване в края на началните пътища.
  • В командата «git difftool» е добавена опция «—skip-to=» за възобновяване на прекъсната сесия от произволен път.
  • Кодексът на поведение (Code-of-conduct), определящ основните принципи за разрешаване на конфликти между разработчиците, е актуализиран до версия 2.0 (по-рано е използвана версия 1.4).

    Източник: opennet.ru
Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster