Випуск розподіленої системи керування вихідними текстами Git 2.25

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

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

  • Наближається до стабілізації та повної готовності можливість часткового клонування (partial clones), що дозволяє переносити лише частину даних та працювати з неповною копією репозиторію. При звичайному клонуванні з репозиторію копіюються всі дані, включно з кожною версією кожного файлу з історії змін. Для великих репозиторіїв копіювання даних призводить до значного збільшення трафіку і дискового простору, навіть якщо розробника цікавить лише підмножина файлів. Для спрощення отримання лише частини робочого дерева вихідних текстів у новому випуску запропоновано експериментальну команду sparse-checkout і нову опцію sparse для команди clone.

    Раніше процес вибіркового клонування проводився через завдання фільтрів для відсіювання зайвого контенту та опції «-no-checkout» для відключення заповнення відсутніх файлів. Після цього, перед виконання операції checkout, потрібно включити налаштування core.sparseCheckout і визначити у файлі .git/info/sparse-checkout список шаблонів шляхів, що виключаються. Наприклад, для клонування без блобів та заборони вилучення файлів із вкладених каталогів глибиною 2 і більше можна було виконати:

    git clone -filter=blob:none-no-checkout /your/repository/here repo
    $ CD репо
    $ cat >.git/info/sparse-checkout
    /*
    !/*
    EOF
    $ git config core.sparseCheckout 1
    $ git checkout.

    Нова команда «git sparse-checkout» суттєво спрощує роботу та зводить процес організації роботи з неповним репозиторієм до команд:

    git clone -filter=blob:none-sparse /your/repository/here repo
    git sparse-checkout set /path/to/check/out

    Команда sparse-checkout дозволяє встановити список шляхів для checkout (set) без ручного налаштування .git/info/sparse-checkout, а також вивести поточний список шляхів (list) та увімкнути або вимкнути часткові checkout (enable/disable).

    Для оптимізації роботи з дуже великими репозиторіями та списками шаблонів запропоновано налаштування «git config core.sparseCheckoutCone«, яка обмежує допустимі шаблони (замість довільних шаблонів .gitignore можна задати всі шляхи і всі файли в заданому підкаталозі слід витягувати). Наприклад, якщо у великому репозиторії є каталог A/B/C і вся робота зосереджена в підкаталозі C, то при включенні режиму sparseCheckoutCone команда git sparse-checkout set A/B/C витягне вміст C повністю, але з "A" і "B" витягне лише необхідні для роботи з "C" частини.

  • З документації («git rebase -h») видалено всі згадки опції «—preserve-merges», яка оголошена застарілою і замість неї для перенесення набору коммітів слід використовувати «git rebase-rebase-merges".
  • Для покращення читання повідомлень з патчами, що надсилаються до списків розсилки, додано опцію «git format-patch —cover-from-description subject», при вказівці якої як тема супровідного листа для набору патчів використовується перший абзац з тексту опису гілки.
  • Реалізовано підтримку спільного застосування команди «git apply —3way» та налаштування «merge.conflictStyle» («git apply» тепер враховує стиль опису конфлікту з merge.conflictStyle за необхідності вирішення конфлікту після спроби застосування файлу з патчем до репозиторію).
  • Код визначення функцій, що використовується в таких операціях як git diff/grep show-function/function-context, розширений підтримкою визначення меж функцій в програмах мовою еліксир.
  • У git add, git commit, git reset та інші команди додана нова опція pathspec-from-file, що дає можливість завантажити список шляхів з файлу або вхідного потоку, замість їх перерахування в командному рядку.
  • Вирішено проблему з визначенням перейменувань на рівні каталогів під час запису коммітів. Визначення не працювало у разі переміщення вмісту підкаталогу до кореня репозиторію.
  • Запропоновано початкову реалізацію переробленої команди «git add -i», що дозволяє додавати змінений вміст в інтерактивному режимі, переписану з Perl на Сі. Ведеться аналогічна переробка команди "git add -p".
  • Проведено рефакторинг команди «git log-graph», що формує ASCII-зображення графа з історією змін у репозиторії. Переробка дозволила значно покращити та спростити висновок без спотворення структури історії, що, наприклад, вирішило проблему з вилазенням малюнка за кордон ширини терміналу.
  • Опція "git log -format=..", що дозволяє змінити формат виведення,
    розширена підтримкою прапорів «l/L» для виведення лише частини email-адреси, що вказується перед символом «@» (наприклад, корисно, коли всі розробники мають email в одному домені).

  • До команди "git submodule" додана підкоманда "set-url".
  • Тестові набори оновлено в рамках підготовки до переходу на
    алгоритм хешування SHA-2 замість SHA-1

Джерело: opennet.ru

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