Mwepụta nke sistemu njikwa isi mmalite Git 2.22

Ewebata ntọhapụ nke usoro nchịkwa isi iyi ekesa Nnukwu 2.22.0. Git bụ otu n'ime usoro njikwa ụdị kachasị ewu ewu, ntụkwasị obi na arụmọrụ dị elu, na-enye ngwaọrụ mmepe na-abụghị nke kwụ ọtọ dabere na ngalaba na ijikọ. Iji hụ na iguzosi ike n'ezi ihe nke akụkọ ihe mere eme na iguzogide mgbanwe mgbanwe, a na-eji hashing nke akụkọ ihe mere eme gara aga na nke ọ bụla, yana ọ ga-ekwe omume iji mbinye aka dijitalụ nke ndị mmepe mee ihe.

N'iji ya tụnyere ntọhapụ gara aga, ụdị ọhụrụ ahụ gụnyere mgbanwe 745, nke a kwadebere na ntinye nke ndị mmepe 74, nke 18 na-ekere òkè na mmepe maka oge mbụ. Main ihe ọhụrụ:

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

isi: opennet.ru

Tinye a comment