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

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

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

  • Розширено можливості використання SSH-ключів для засвідчення Git-об'єктів цифровим підписом. Для розмежування часу дії кількох ключів додано підтримку OpenSSH-директив "valid-before" та "valid-after", за допомогою яких можна забезпечити коректну роботу з підписами після ротації ключа одного з розробників. До цього виникала проблема з поділом підписів старим і новим ключем — якщо видалити старий ключ, то неможливо буде перевірити зроблені з його допомогою підписи, а якщо залишити — збережеться можливість створення нових підписів старим ключем, на зміну якому вже прийшов інший ключ. За допомогою valid-before та valid-after можна розділити область дії ключів на основі часу створення підпису.
  • У налаштуванні merge.conflictStyle, що дозволяє вибрати режим оформлення інформації про конфлікти при злитті, з'явилася підтримка режиму «zdiff3», що переміщує за межі області конфлікту всі типові рядки, вказані на початку або наприкінці конфлікту, що дозволяє досягти більш компактного представлення інформації.
  • До команди «git stash» додано режим «—staged», який дозволяє заховати лише зміни, додані в індекс, наприклад, у ситуації, коли необхідно тимчасово відкласти частину складних змін для того, щоб спочатку додати те, що вже готове, а з рештою розібратися через деякий час. Режим нагадує команду «git commit», яка записує лише поміщені в індекс зміни, але замість створення нового комміта в «git stash —staged» результат зберігається у тимчасову область stash. Після того, як зміни знадобляться, їх можна повернути командою «git stash pop».
  • До команди «git log» додано новий специфікатор формату «-format=%(describe)», що дозволяє поєднати висновок «git log» з результатом виконання команди команди «git describe». Параметри для git describe вказуються безпосередньо всередині специфікатора («format=%(describe:match=) ,exclude= )»), у якому також можна включити скорочені теги («—format=%(describe:tags= )») та налаштувати число шістнадцяткових символів для ідентифікації об'єктів («—format=%(describe:abbrev= )»). Наприклад, для виведення 8 останніх коммітів, теги яких не мають мітки кандидата в релізи, та вказівки 8-символьних ідентифікаторів можна використовувати команду: $ git log -8 —format='%(describe:exclude=*-rc*,abbrev=13 )' v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d 94bbc056f2.34.1 v642-56-gffb95f8d v7-2.34.1- gdf203c9adeb2980902 v2.34.1-640-g3b41a212
  • У налаштуванні user.signingKey реалізовано підтримку нових типів ключів, які не обмежуються типом «ssh-» і вказують повний файловий шлях до ключа. Альтернативні типи задаються за допомогою префікса key::, наприклад, key::ecdsa-sha2-nistp256 для ключів ECDSA.
  • Помітно підвищена швидкість генерації списку змін у режимі «histogram», а також при використанні опції «color-moved-ws», що управляє підсвічуванням прогалин у кольоровому diff-і.
  • У команді «git jump», яка використовується для надання Vim інформації про точні переходи на потрібну позицію у файлі при розборі конфліктів злиття, перегляді відмінностей або виконанні операції пошуку, надано можливість звуження конфліктів злиття, що охоплюються. Наприклад, для обмеження операцій тільки каталогом "foo" можна вказати "git jump merge - foo", а для виключення з обробки каталогу "Documentation" - "git jump merge - ': ^ Documentation'"
  • Проведена робота зі стандартизації застосування типу size_t замість unsigned long для значень, що представляють розмір об'єктів, що дозволило домогтися можливості застосування фільтрів clean і smudge з файлами розміром більше 4 ГБ на всіх платформах, включаючи платформи з моделлю даних LLP64 , тип "unsigned long" у якій обмежений 4 байтами.
  • До команди «git am» додано опцію «—empty=(stop|drop|keep)», що дозволяє при розборі патчів з поштової скриньки вибрати поведінку для порожніх листів, які не містять патчів. Значення stop приведе до завершення всієї операції застосування патчів, drop пропустить порожній патч, keep створить порожній коміт.
  • У команди "git reset", "git diff", "git blame", "git fetch", "git pull" і "git ls-files" додано підтримку часткових індексів (sparse index), що дозволяють підвищити продуктивність і заощадити місце в репозиторіях , В яких виконуються операції часткового клонування (sparse-checkout).
  • Оголошено застарілою команду "git sparse-checkout init", замість якої слід використовувати "git sparse-checkout set".
  • Додано початкову реалізацію нового бекенду «reftable» для зберігання посилань, таких як гілки та теги, в репозиторії. Новий бекенд використовує блочне сховище, застосовуване проектом JGit та оптимізоване для зберігання дуже великої кількості посилань. Бекенд поки не інтегрований із системою посилань (refs) і не готовий до практичного застосування.
  • Палітра кольорів команди «git grep» приведена до відповідності утиліті GNU grep.

Джерело: opennet.ru

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