Release fan it ferspraat boarnekontrôlesysteem Git 2.22

Yntrodusearre frijlitting fan it ferspraat boarne kontrôle systeem git 2.22.0. Git is ien fan 'e populêrste, betroubere en heechprestearjende ferzjekontrôlesystemen dy't fleksibele net-lineêre ûntwikkelingsynstruminten leveret basearre op tûken en gearfoegjen fan tûken. Om de yntegriteit fan 'e skiednis te garandearjen en ferset tsjin feroaringen yn' e efterstân, wurdt ymplisite hashing fan 'e hiele foarige skiednis yn elke commit brûkt, it is ek mooglik om de digitale hantekeningen fan' e ûntwikkelders fan yndividuele tags en commits te ferifiearjen.

Yn ferliking mei de foarige release waarden 745 wizigingen akseptearre yn 'e nije ferzje, taret mei de dielname fan 74 ûntwikkelders, wêrfan 18 foar it earst meidien oan 'e ûntwikkeling. haad ynnovaasjes:

  • Доступный начиная с выпуска 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» stiet ta перезалить коммиты из отдельной ветки на более новую 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).

Boarne: opennet.ru

Add a comment