випуск розподіленої системи керування вихідними текстами . Git є однією з найпопулярніших, надійних та високопродуктивних систем управління версіями, що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні та злитті гілок. Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються неявне хешування всієї попередньої історії в кожному коміті, також можливе посвідчення цифровими підписами розробників окремих тегів та коммітів.
Порівняно з минулим випуском у нову версію прийнято 544 зміни, підготовлені за участю 78 розробників, з яких 21 вперше взяли участь у розробці. :
- Додано підтримку макросів конфігурації, якими можна швидко перемикатися між різними наборами налаштувань, не вдаючись у деталі пов'язаних із нею конкретних опцій. За допомогою макросів немає необхідності запам'ятовувати, які саме налаштування потрібно поміняти для активації тієї чи іншої функціональності. Наприклад, у разі уповільнення роботи з великим репозиторієм може знадобитися перейти на новий механізм індексації, включити стиснення префіксів шляхів і задіяти кеш файлів, що не відстежуються, виставивши параметр index.version в значення 4 і активувавши core.untrackedCache. Макроси дозволяють не витрачати час на пошук потрібного рішення в документації, а одразу активувати налаштування з оптимізаціями для репозиторіїв з великою кількістю файлів:
git config feature.manyFiles true
- За замовчуванням включено зберігання об'єктів у формі графа коммітів (commit-graph), при якому для індексації використовується не лінійний список хешів об'єктів з посиланнями на інші об'єкти, а структура у вигляді графа. Якщо раніше для визначення релізів у яких міститься певне виправлення потрібно завантаження кожного об'єкта з диска для пошуку посилань, то при зберіганні у вигляді графа можна відразу визначити всі необхідні зв'язки. Переклад на зберігання у вигляді графа коммітів у репозиторіях ядра Linux і Git дозволив досягти майже дворазового збільшення продуктивності операцій з гілками. Для активації нового методу зберігання після оновлення Git 2.24 слід виконати команду «git gc».
Зі змін, пов'язаних з commit-graph, також відзначається приведення до єдиного з іншими командами виду реалізації індикатора прогресу виконання операції у пов'язаних з commit-graph командах (git commit-graph write, git commit-graph verify тощо). Індикатор прогресу тепер за умовчанням виводиться лише терміналу (для зміни поведінки слід використовувати опцію «-[no-]progress»). Крім того, додано новий конфігураційний параметр fetch.writeCommitGraph, що включає автоматичне оновлення файлу з графом коммітів при операціях «git fetch» (всі видобуті із зовнішніх репозиторіїв комміти відразу потраплятимуть у commit-graph без необхідності окремого запуску auto-gc);
- Додано команду для перезапису історії змін — «", яка є більш простою альтернативою команді "» для виконання операцій з історією змін у репозиторії (наприклад, видалення файлу з репозиторію або вилучення історії змін певного каталогу). Для підвищення ефективності замість упорядкованого покомитного розбору в git filter-repo операції виконуються над поданням історії у формі безперервного потоку.
Фільтрування історії здійснюється за допомогою опції "-path-{glob,regex}", що дозволяє застосовувати як прості маски, так і регулярні вирази. Також є опції для виконання операції "пошук та заміна" або чищення бінарних об'єктів, розмір яких перевищує заданий. Кожен переписаний коміт забезпечується новим хеш-ідентифікатором SHA-1 і відповідно до нового ідентифікатора оновлюються всі посилання на замінений коміт.
Для виведення зведення зі статистикою про репозиторію (кількість об'єктів за типами, найбільші файли та каталоги, які розширення вимагають більше місця на диску тощо) передбачена опція «-analyze». Для розширення функціональності є можливість підключення довільних callback-обробників мовою Python, через які можна створювати нові підкоманди, так і обробляти різні події (наприклад, нові типи файлів);
- Додана опція "-end-of-options", що дозволяє відокремити опції від імен посилань, які можуть починатися з символу "-" і сприйматися як опції ("git log -end-of-options -super-dangerous-option"). Якщо в побуті подібні імена можна екранувати як git log 'refs/heads/super-dangerous-option', то в скриптах могли виникнути проблеми з визначенням простору імен. Загальноприйнятий роздільник » - » в цьому випадку не застосовується, тому що вже використовується для відділення імен посилань від файлів (наприклад, "git log -end-of-options - super-dangerous-option ^master - path/to/file");
- У «git rebase-rebase-merges» додані опуції «-strategy» та «-strategy-option» для вибору ;
- Додано новий обробник ".git/hooks/pre-merge-commit", що викликається після виконання злиття, але до запису результуючого комміту;
- У двигун автодоповнення команд додана підтримка доповнення конфігураційних змінних у прив'язці до налаштувань конкретних команд.
Наприклад, при необхідності набрати "git-c core.autocrlf=false add path/to/my/file", але не пам'ятаючи точної назви змінної "core.autocrlf", можна натиснути Tab і отримати підказку.
Крім того, розробники Git кодекс поведінки учасника проекту, що визначає основні засади вирішення конфліктних ситуацій. Документ ґрунтується на рекомендаціях ««, застосовуваних у багатьох відкритих проектах, включаючи ядро Linux, Eclipse, Freedesktop, GitLab, Ruby та Kubernetes. Документ визначає рівні можливості для всіх учасників, незалежно від їхнього світогляду, віку, статі, релігійних уподобань, рівня освіти, соціального статусу та національності. У співтоваристві вітається доброзичлива форма спілкування, розуміння, співчуття проблем інших учасників, сприйняття конструктивної критики, прийняття найкращих для всієї спільноти рішень. Не допускаються тролінг, образлива манера спілкування, спроби приниження, домагання, порушення недоторканності приватного життя, розголошення персональних відомостей та інші дії, які можуть вважатися недоречними при професійному спілкуванні.
Джерело: opennet.ru
