Випуск розподіленої системи керування вихідними текстами 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

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