Paskirstytų šaltinių valdymo sistemos Git 2.22 išleidimas

Įvesta paskirstyto šaltinio valdymo sistemos išleidimas git 2.22.0. Git yra viena populiariausių, patikimiausių ir našiausių versijų valdymo sistemų, teikianti lanksčius nelinijinius kūrimo įrankius, pagrįstus šakojimu ir sujungimu. Siekiant užtikrinti istorijos vientisumą ir atsparumą retroaktyviems pokyčiams, kiekviename įsipareigojime naudojama netiesioginė visos ankstesnės istorijos maiša, taip pat galima sertifikuoti atskiras žymas ir įsipareigojimus skaitmeniniais kūrėjų parašais.

Palyginti su ankstesne versija, naujojoje versijoje buvo 745 pakeitimai, parengti dalyvaujant 74 kūrėjams, iš kurių 18 kūrime dalyvavo pirmą kartą. pagrindinis naujoves:

  • Доступный начиная с выпуска 1.18 новый режим переноса набора коммитов «git rebase —rebase-merges» заменил собой старую опцию «—preserve-merges», которая теперь помечена как устаревшая. Операция «git rebase» применяется для замены серии коммитов на новый базовый коммит, например, для сдвига отдельной ветки, в которой развивается какая-то новая возможность, к актуальному состоянию master-ветки, включающей исправления, добавленные после ответвления:

    o — o — o (my-feature)

    /

    o — o — o — o — o (master)

    o — o — o (my-feature)

    /

    o — o — o — o — o (master)

    Для сохранения структуры ветвления в переносимой ветке ранее могла применяться опция «—preserve-merges», которая при запуске в интерактивном режиме (git rebase -i —preserve-merges) позволяла редактировать историю коммитов, но не гарантировала полное сохранение структуры репозитория. Пришедший на смену режим «—rebase-merges» позволяет сохранить структуру изменений в переносимой ветке, предоставляя при этом полный набор интерактивных операций, включая удаление, перегруппировку и переименование коммитов.

    Например, «—rebase-merges» leidžia перезалить коммиты из отдельной ветки на более новую master-ветку, сохранив при этом структуру ветвления в переносимой ветке, и внести на ходу некоторые изменения в примечания к коммитам.

  • Добавлена поддержка создания новой ветки на основе результата определения базы слияния двух других веток (merge base, привязка к общему предку) при помощи конструкций «git branch new A…B» и «git checkout -b new A…B», в которых «A…B» подразумевает определение базы слияния между двумя указанными коммитами, по аналогии с тем, как «git checkout A…B» смещает HEAD на базовый коммит и «diff A…B» показывает изменения между коммитом «B» и общим с коммитом «А» предком.

    Например, при работе над отдельной веткой my-feature предложенную возможность можно использовать когда требуется начать с другой ветки, например, с того же места в master-ветке, с которого была извлечена ветка my-feature. Ранее для этого требовалось вручную изучить лог изменений, что создавало неудобство при наличии большой истории изменений, затем выполнить «git merge-base master my-feature» для вычисления хэша базы слияний между ветками master и my-feature и создать новую ветку относительно общего предка «git branch my-other-feature хэш». В Git 2.22 для создания ветки относительно базы слияния двух других веток можно использовать синтаксис «git branch my-other-feature A…B»;

  • Добавлена опция «git branch —show-current» для отображения имени ветки, полученной при выполнении операции checkout;
  • Добавлена опция «git checkout —no-overlay — dir», позволяющая при выполнении операции checkout привести содержимое каталога dir к виду, полностью соответствующему состоянию master-ветки. Например, если в локальной копии каталога dir имеется файл, отсутствующий в master-ветке, то по умолчанию при выполнении «git checkout master — dir» он будет оставлен, а при указании опции «—no-overlay» удалён;
  • В команде «git diff» задействован универсальный API для разбора опций, что позволило унифицировать обработку опций с другими утилитами git. Например, в «git diff» для всех опций теперь доступны и их антагонисты («—function-context» и «—no-function-context»);
  • Добавлена возможность фильтрации при выводе «git log» прикреплённых к коммитам расширенных меток («trailer» — дополнительные информационные флаги, такие как Signed-off-by и Co-authored-by). Возможна фильтрация меток как по ключу, так и по значению, например:
    «git log —pretty=»%(trailers:key=Reviewed-by,valueonly)»;

  • Добавлен новый механизм трассировки Trace2, предлагающий более гибкий и структурированный формат вывода. Trace2 позволяет собирать телеметрию о выполняемых операциях и данных о производительности для более детального анализа и отладки (обработчик назначается пользователем, никакие данные не отправляются вовне);
  • Сделан более читаемым отчёт «git bisect», в котором теперь более наглядно выделяются проблемные коммиты и выводятся сводная статистика по изменениям для каждого файла (на уровне числа изменённых строк);
  • Переработана эвристика определения переименований каталогов с целью исключения ложной установки меток переименования. При наличии сомнений подобные каталоги теперь помечаются конфликтующими;
  • Обеспечен вывод предупреждения при попытке установки тега на другой тег, что, как правило, совершается по ошибке и может привести к установке метки не на тот коммит (например, конструкция вида «git tag -f -m «updated message» my-tag1 my-tag2″ приведёт к созданию тега на старый тег, в то время как разработчик рассчитывал, что новый тег будет установлен на коммит, на который указывает старый тег);
  • Включена генерация для репозиториев битовых карт (дисковая структура «reachability bitmaps»), сохраняющих данные о наборах объектов, доступных для каждого коммита, и позволяющих быстро определить наличие базового объекта. Указанная структура заметно сокращает время выполнения операций извлечения данных (git fetch).

Šaltinis: opennet.ru

Добавить комментарий