Випуск системи керування вихідними текстами Git 2.39

Після двох місяців розробки опубліковано випуск розподіленої системи керування вихідними текстами Git 2.39. Git є однією з найпопулярніших, надійних та високопродуктивних систем управління версіями, що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні та злитті гілок. Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються неявне хешування всієї попередньої історії в кожному коміті, також можливе посвідчення цифровими підписами розробників окремих тегів і коммітів.

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

  • До команди «git shortlog», призначеної для відображення зведень зі статистикою з історії змін, додано опцію «—group» для довільного угруповання коммітів по полях, які не обмежуються автором або коммітером. Наприклад, для показу списку розробників з інформацією про кількість змін, що враховує помічників, згаданих у полі Co-authored-by, можна використовувати команду: git shortlog -ns

    Висновок 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.. -% m'-format = '% cd' | sort | uniq -c

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

    Час знаходження недосяжних об'єктів у репозиторії перед фактичним видаленням визначається опцією «—prune= ». При цьому незважаючи на те, що затримка перед видаленням є досить ефективним і практичним способом запобігання пошкодженню репозиторію через стан гонки, він не є на 100% надійним. Щоб спростити відновлення пошкодженого репозиторію в новому випуску, надано можливість збереження відсутніх об'єктів, для чого до команди «git repack» додано опцію «—expire-to», що дозволяє задати файл для створення зовнішньої копії всіх об'єктів, що видаляються. Наприклад, для збереження у файлі backup.git недосяжних об'єктів, які не змінювалися останні 5 хвилин, можна використовувати команду: git repack -cruft -cruft-expiration=5.minutes.ago -d

  • Значно збільшена (до 70%) швидкість виконання операції git grep cached при пошуку в областях, в яких застосовується часткове клонування (sparse-checkout) і для яких є часткові індекси (sparse index). Раніше при вказівці опції «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

Додати коментар або відгук