Профиль: Аноним (вход | регистрация) неRU opennet.me  
The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск Git 2.55 c включением по умолчанию поддержки Rust

30.06.2026 11:15 (MSK)

Представлен релиз распределенной системы управления исходными текстами Git 2.55. Среди ключевых изменений: включение по умолчанию сборки с Rust, реализация для Linux процесса fsmonitor, новая стратегия переупаковки инкрементального MIDX-индекса, команда "git history fixup" для исправления коммита, оптимизация генерации битовых карт доступности объектов, поддержка параллельного выполнения hook-ов, команда "git format-rev". Код Git распространяется под лицензией GPLv2+.

По сравнению с прошлым выпуском в новую версию принято 505 изменений, подготовленных при участии 100 разработчиков, 33 из которых впервые приняли участие в разработке Git. Основные новшества (1, 2, 3):

  • По умолчанию включена поддержка компонентов на языке Rust. Компилятор rustc добавлен в число сборочных зависимостей. Для сборки без Rust можно использовать флаг "NO_RUST=1" при запуске утилиты make или "-Drust=disabled" при выполнении "meson configure". Возможность отключения сборки с Rust будет поддерживаться до ветки Git 3.0, в которой Rust будет включён в число обязательных зависимостей. На языке Rust реализована прослойка для переносимости между конфигурациями с хэшами SHA-1 и SHA-256, а также некоторые внутренние функции, такие как кодирование и декодирование целочисленных значений переменной длины. В будущем ожидается переработка на Rust более значительны внутренних компонентов Git.
  • В экспериментальную команду "git history", предоставляющую возможности для перезаписи истории изменений, добавлена операция "git history fixup" для исправления коммита. Операция "fixup" позволяет перенести изменения, добавленные через "git add", в более ранний коммит и автоматически переписать все последующие коммиты по аналогии с выполнением команды "git commit --fixup=<commit>" и запуска "git rebase --autosquash <commit>~".
  • Для платформы Linux реализован фоновый процесс fsmonitor, отслеживающий изменения в файловой системе при помощи механизма inotify и позволяющий обойтись без перебора всего рабочего каталога при выполнении таких команд, как "git status" Включение осуществляется через настройку "core.fsmonitor".
  • В команду "git repack" добавлен режим "--write-midx=incremental", реализующий новую стратегию обновления метаданных в инкрементальном MIDX-индексе (multi-pack index), позволяющую обойтись без переупаковки всего индекса. В инкрементальном многопакетном индексе вместо одного большого индекса, содержащего информацию о распределении объектов по pack-файлам, применяется разделение на слои - каждый слой охватывает определённое число pack-файлов и хранится в отдельном bitmap-файле. Подобная структура позволяет добавлять в индекс данные об объектах в новых pack-файлах, прикрепляя к индексу новые слои без перестроения уже имеющихся слоёв.

    Команда "git repack --write-midx=incremental" позволяет добавить в инкрементальный MIDX-индекс новый слой, охватывающий недавно созданные pack-файлы. В сочетании с режимом упаковки репозиториев "--geometric" новая команда даёт возможность объединить новые объекты из нескольких pack-файлов в один более крупный pack-файл и при необходимости осуществить упаковку и слияние нескольких соседних слоёв инкрементального MIDX-индекса. Подобная стратегия позволяет при выполнении "git repack" переписывать только верхние слои, оставляя старые большие слои нетронутыми, а также исключить неконтролируемое разрастание цепочки слоёв, поддерживая общее число слоёв на уровне, пропорциональном логарифму от общего числа объектов.

  • Значительно оптимизирована генерация битовых карт доступности объектов за счёт нового алгоритма обхода дерева объектов, исключающего лишнюю рекурсию, кэширования позиций объектов, сортировки битовых карт до их объединения операцией XOR и переработки кода для создания битовых карт псевдослияния (pseudo-merge). В тестовом репозитории оптимизации позволили сократить время генерации битовых карт с 612 до 294 секунд.
  • Реализована возможность параллельного выполнения независимых hook-ов в файлах конфигурации. Параллельно не могут запускаться hook-и, влияющие на совместное состояние или учитывающие его, например, меняющие примечания к коммитам или инспектирующие индексы и рабочее дерево. При этом можно параллельно запускать hook-и для проверки линтером и выполнения unit-тестирования. Допускающие параллельное выполнение hook-и настраиваются через параметр "hook.имя_хука.parallel = true". Число одновременно запускаемых работ определяется через настройку hook.jobs, hook.<event>.jobs или опцию командной строки "-j".
  • В команде "git pack-objects --path-walk" реализована возможность указания фильтров, таких как "blob:none", "blob:limit=<n>", "tree:0", "object:type=<type>", "sparse:<oid>" и "combine:". В проведённом тесте отбрасывание блобов при выполнении "--path-walk" позволило на 16% сократить размер сформированного pack-файла.
  • Добавлена команда "git format-rev" для форматирования ревизий и имён объектов, упоминаемых в списках коммитов или встречающихся в произвольном тексте (например, можно использовать в хукак для обработки примечаний к коммитам).
    
       git last-modified | git format-rev --stdin-mode=text --format=%an
     
       Junio C Hamano	builtin/commit.c 
    
  • Включено по умолчанию экранирование большинства последовательностей управления терминалом в информационных сообщениях и тексте ошибок, передаваемых сервером. При обращении к вредоносному серверу подобные escape-последовательности могли использоваться для скрытия или модификации вывода, например, через escape-последовательности для перемещения курсора и очистки текста. Оставлена поддержка escape-последовательностей для выделения элементов цветом.
  • Команда "git checkout -m теперь автоматически сохраняет конфликтующие локальные изменения в stash-области без необходимости незамедлительно разрешать конфликт.
  • В команду "git push" добавлена возможность помещения ветки на несколько внешних Git-серверов одной командой. Например, для передачи ветки main не только на основной сервер, но и на зеркала можно создать группу "publish" из серверов "github", "gitlab" и "mirror":
    
       git config remotes.publish "github gitlab mirror" 
       git push publish main
    
  • В команду "git log --graph" добавлена опция "--graph-lane-limit=<N>" для ограничения числа вертикальных полос при визуализации веток, что позволяет оставить место на экране под данные о коммитах в репозиториях с большим числом веток.
    
    ...
    * | | | |   619931f561 Merge branch 'dl/posix-unused-warning-clang'
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
    | * | | | ~ ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: filter pathspec before lstat
    
  • В команды "git log" и "git rev-list" добавлена опция "--max-count-oldest=<N>, позволяющая выбрать N самых старых коммитов в диапазоне.


  1. Главная ссылка к новости (https://github.blog/open-sourc...)
  2. OpenNews: Выпуск системы управления исходными текстами Git 2.54
  3. OpenNews: Выпуск системы управления исходными текстами Git 2.53
  4. OpenNews: В Git 3.0 предложено сделать Rust обязательной частью сборочной инфраструктуры
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65808-git
Ключевые слова: git, rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (31) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Yowayowa Sensei (?), 11:50, 30/06/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Когда у меня интересуются, что я считаю оверинжинирингом, я не задумываясь отвечаю, что это git
     
     
  • 2.4, Аноним (4), 11:54, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А как-же linux kernel?
     
     
  • 3.7, Yowayowa Sensei (?), 11:56, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так одно создавалось для другого. Неудивительно почему получился паршивый продукт. Не говоря о том, что абсолютное большинство коммерческих и любительских проектов используют централизованную модель разработки (через github, gitLab или bitbucket).

    Многие распределенные возможности git остаются невостребованными, но разработчики все равно вынуждены нести накладные расходы на их понимание и обслуживание (например, разбираться с разницей между git fetch и git pull, настраивать upstream-ветки).

     
     
  • 4.9, Аноним (9), 12:03, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > разбираться с разницей между git fetch и git pull

    Ну, пользователей же вынуждают разбираться с разницей между скачиванием документа/программы/песенки и их открытием/запуском/прослушиванием. Так в чём проблема увидеть разницу между git fetch и git pull? Не говоря уж о том, что git pull вообще не особо нужная команда, я вообще ей пользовался десяток раз, чтобы подтянуть изменения чужих репозиториев и пересобрать исходник. Для своих репозиториев удобнее git fetch+git merge.

     
     
  • 5.14, одвто7 (?), 12:23, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Глупости, pul как раз одна из популярных команд!
    git pull
    git add .
    git commit -m "..."
    git push
    Это покрывает 90% работы с гитом, всё остальное это уже рукоблудие 😁
     
     
  • 6.22, Аноним (22), 12:47, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А весь этот винегрет можно было заменить какой-нибудь одной git sync "superhotfix 128"
     
     
  • 7.24, Аноним (24), 12:51, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    открой для себя магию алиасов :)
     
  • 4.19, Аноним (19), 12:39, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Попробуй предложить, чтобы из гита удалили лишнее, что используется для децентрализованной разработки.
    Сообщество™ Борцунов за Щв06одьку™ будет тебя поливать помоями, даже если они не используют эти фичи))

     
  • 2.8, Аноним (8), 12:02, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Когда у меня интересуются, что я считаю оверинжинирингом, я не задумываясь отвечаю, что это git

    Программы можно разделить на те которые оверинжиниринг, и те которые нафиг никому не нужны.

    Как показывает практика мир вокруг - весьма сложная штука, поэтому софт тоже становится сложным.
    А всякие suckless поделки на практике могут только suck ¯\_(ツ)_/¯.

     
     
  • 3.11, Yowayowa Sensei (?), 12:05, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > софт тоже становится сложным

    Только по той причине, что срыночек порешал, а не здравый смысл

     
     
  • 4.16, Аноним (16), 12:24, 30/06/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.21, aname (ok), 12:43, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё один воен против рыночка.

    Да, в принципе, только благодаря ему что- то кроме … существует.

     
  • 3.20, aname (ok), 12:41, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Программы можно разделить на те которые оверинжиниринг,
    > и те которые нафиг никому не нужны.

    Ох уж эти ложные дихотомии


    > мир вокруг - весьма сложная штука, поэтому софт тоже становится сложным.

    Не поэтому.


    > А всякие suckless поделки на практике могут только suck

    Против KISS воюем?

     
     
  • 4.25, Аноним (19), 12:52, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Ох уж эти ложные дихотомии

    Ложность не доказывается твоим комментарием)

    >> мир вокруг - весьма сложная штука, поэтому софт тоже становится сложным.
    > Не поэтому.

    Поэтому. Сложные предметные области порождают сложный софт.
    Так как гит делался как децентрализованная штука - то сработала теорема Брюера.
    Поэтому он получился сложный.

    Можно конечно выкинуть половину кода со словами "а мне и так сойдет", но на выходе получится штука у которой не будет всех возможностей гита.

    >> А всякие suckless поделки на практике могут только suck
    > Против KISS воюем?

    А что против нее воевать? Принцип классный на бумаге, а в реальности получается то что получается)
    На UNIX-way тоже поколения какеров наяривали, и где теперь UNIX со своим way?

     
     
  • 5.39, e (??), 13:43, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > и где теперь UNIX со своим way?

    Примерно везде? Начиная с Intel ME до автомобилей, самолётов, ракет, мед. оборудования, суперкомпьютеров и тд

     
  • 2.12, q (ok), 12:07, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Напоминаю, что ты не обязан пользоваться ВООБЩЕ ВСЕМ функционалом гита. Оверинжиниринг -- это когда что-то сделали, а оно могло быть проще. Так вот: приведи конкретный пункт, в котором что-то в гите могло быть проще. Хотя бы один пункт. Вот прям ща. Ты же отвечаешь за свои слова, верно? Или просто газифицируешь лужу? Один пункт. Не два, не три, а всего один.
     
     
  • 3.17, e (??), 12:33, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Оверинжиниринг -- это когда что-то сделали, а оно могло быть проще.

    Не только. Из Cambridge Dictionary:

    over-engineer --- to create, design, or build something to be more complicated or perform more actions than is necessary or helpful.

    Вторая часть как раз к гиту и подходит

     
     
  • 4.18, q (ok), 12:35, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Вторая часть как раз к гиту и подходит

    Отлично! А теперь ты берешь - и приводишь функционал в гите, которым вообще никто не пользуется: ни пользователи, ни другие системы вроде cgit, GitLab etc. Давай. Прям ща. Хоп! - и приводишь ОДНУ такую вещь.

     
     
  • 5.36, e (??), 13:26, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > приводишь функционал в гите, которым вообще никто не пользуется

    Такого функционала просто не может быть, гит слишком распространен, добавь туда хоть аудиоплеер, им хоть кто-то да будет пользоваться.

    > ни другие системы вроде cgit, GitLab etc

    Так в этом и проблема, по видимому. Git превращается (или уже превратился) из простой СКВ, в некий "бэкенд" для крупных сервисов, судя по последним чейнджлогам. И вариант "просто не пользоваться" избыточным функционалом не прокатывает. На все эти лишние команды приходится обращать внимание, просто потому что они есть, ну, ты же как бы инструмент изучаешь, его желательно "полностью" освоить. И выходит, что для изучения простого доп. инструмента, который вроде работу облегчать должен, нужно времени больше, чем для изучения какого-нибудь ЯП.

     
     
  • 6.40, q (ok), 13:44, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > добавь туда хоть аудиоплеер, им хоть кто-то да будет пользоваться

    Функционал аудио-плеера не принадлежит домену управления ревизиями дерева исходников. Приведи функционал, который удовлетворяет следующим критериям:

    относится_к_теме_гита && (могло_быть_проще || никто_не_пользуется)

    > Git превращается (или уже превратился) из простой СКВ, в некий "бэкенд" для крупных сервисов

    Всегда был таким, доброе утро. Хочешь попроще? Пользуйся "Новой папкой (42)" и "Отчет-финальный-финальный-точно-финальный-5-после-правок-8.docx".

    > вариант "просто не пользоваться" избыточным функционалом не прокатывает

    Прокатывает. Я ими не пользуюсь.

    > На все эти лишние команды приходится обращать внимание

    Не приходится. О существовании большинства из них я даже не в курсе.

    > ты же как бы инструмент изучаешь, его желательно "полностью" освоить

    Нет. Инструмент осваиваешь ровно настолько, насколько лично тебе нужно. Скажем, ты даже свой телевизор освоил лишь на 10% - и все равно успешно пользуешься им годами. А вот ты попробуй потыкать по менюхам и на все кнопки пульта -- откроешь для себя редчайшие 90% функционала.

    > нужно времени больше, чем для изучения какого-нибудь ЯП

    А ЯП ты как изучаешь? По учебникам, в которых объясняется только то, что нужно тебе? Или читаешь стандарт от корки до корки, включая BNF синтаксиса? Вот то-то же и оно. Ты и ЯП не "полностью" осваиваешь.

     
  • 3.23, Аноним (23), 12:48, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Оверинжиниринг -- это когда что-то сделали, а оно могло быть проще

    вы ошиблись

     
  • 3.31, НектоОткудаТо (?), 13:08, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Не с целью поругаться, но по поводу "проще" - вот не могу назвать detached head удобной концепцией для тех, кто хочет перейти на произвольный коммит. Допускаю, что Вам и многим другим это может казаться простым. А вот мне и многим другим это простым не кажется. Вывод - что не просто для всей целевой аудитории, то простым не является.
     
     
  • 4.35, q (ok), 13:25, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ты не отличаешь "сложно" от "оверинжиниринг"? Извиняй чувак, но реальные самолеты управляются чуточку сложнее, чем WASD-клавиши (даже если ты на 146% уверен, что WASD хватает! тебе в играх их хватало во всяком случае!)
     
  • 2.37, хрю (?), 13:36, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    git без оверинжиринга называется hg +). До сих пор до конца не умер. Для 95% коммерческих разработок его возможностей заглаза.

    Но интеграций уровня gitlab к сожалению нема, отсюда и проистекает к сожалению предсмертное состояние.

     

  • 1.3, Аноним (3), 11:52, 30/06/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ждём форка или независимой реализации на любом языке из набора GCC. Gccrs ещё не готов.
     
     
  • 2.10, Аноним (10), 12:04, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ждём форка или независимой реализации на любом языке из набора GCC. Gccrs ещё не готов.

    Но зачем?
    Оно отлично собирается clang/llvm под свободной лицензией.
    Зачем делать форк для гнуракового убожества?

     
     
  • 3.15, Аноним (3), 12:24, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потому что, GCC forever! Лучше, чтобы весь бинарный код был сгенерирован одним кодогенератором. По крайней мере, код базовых компонентов системы.
     
     
  • 4.41, Аноним (41), 13:52, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Угу, часть крейтов фейлится или компилится неправильно, если шланг не единственный компилятор в системе. Я знал, что растолюбы тупые, но такой дичи не ожидал. Ну, чтобы не быть голословным, присмотрись к proc-macro2.
     
  • 3.27, Аноним (3), 12:57, 30/06/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.38, Аноним (38), 13:41, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > clang/llvm

    Это который отстает в реализации стандартов?

     
  • 3.42, Аноним (42), 13:54, 30/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что иметь один компилятор в виде rustc - потенциальная проблема с бэкдором. Единая точка для встраивания вредоносного кода. Нет альтернативных компиляторов. Рано или поздно стрельнет такая штука как описывал Кен Томпсон в "Reflections on Trusting Trust".
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру