Кратко

  • Проект перехода Git 2018 года выбрал SHA-256 и описал двустороннее сопоставление старых и новых имён объектов. Это был план перехода, а не сообщение о готовой общей совместимости.
  • Руководство Git 2.29.0 называло репозитории SHA-256 экспериментальными в 2020 году. Руководство Git 2.54.0 и в 2026 году прямо указывало на отсутствие взаимодействия двух форматов.

Переименовать объект — переписать ссылки

Обычный файл может сохранить свои байты и получить новое имя по SHA-256. С объектом blob это самая понятная часть задачи. Дерево Git содержит имена файлов и поддеревьев. Коммит содержит имя дерева и родительских коммитов. Метка тоже может указывать на объект. Документ о переходе показывает цепную реакцию: новое имя внутри ссылки меняет байты объекта, который эту ссылку хранит. У него самого меняется имя. Так работа распространяется по графу истории. Поменять табличку на двери недостаточно, когда адреса дверей записаны в каждом соседнем помещении.

Старые имена SHA-1 давно жили в локальных архивах, удалённых сервисах и сторонних программах. Для совместной работы нужно знать, какому имени SHA-256 соответствует старое имя SHA-1. Сам хеш не содержит такой исторической справки. Её надо построить, хранить и применять там, где пересекаются два мира.

План 2018 года предложил двустороннюю таблицу имён. Предполагалось переводить репозитории по одному и сохранять связь с серверами SHA-1. Авторы разложили работу на этапы и вывели поддержку нового протокола за пределы первоначального проекта. Бумага аккуратно отделяла желаемую перевозку от уже действующего маршрута.

Локальная команда не открыла весь маршрут

В руководстве Git 2.29.0 за 2020 год появился параметр --object-format=sha256. Там же стояло предупреждение: формат экспериментален, предназначен для проверки и в общем случае не позволяет делить работу с репозиториями SHA-1. Можно построить новый склад, но это ещё не договор с транспортной сетью вокруг него.

Руководство Git 2.54.0 сообщает, что в 2026 году sha1 остаётся форматом по умолчанию, а sha256 доступен как выбор. Между репозиториями этих типов на тот момент нет взаимодействия. Это точное описание границы, которую нельзя скрыть одним присутствием нового параметра.

В документе BreakingChanges Git намерен сделать SHA-256 стандартом для новых репозиториев в Git 3.0. Даты выпуска там нет. Перед изменением должны подготовиться библиотеки, приложения и сервисы размещения; отказ от формата SHA-1 пока не запланирован. Новые записи могут начаться по другому правилу, а старые истории продолжат существовать. Сосуществование требует собственной инфраструктуры.

Решение проекта и власть работающей системы

Проект перехода обсуждал слабости SHA-1, включая коллизию SHAttered 2017 года. У выбора SHA-256 была техническая причина. Однако встроенные ссылки и зависимые программы не исчезали вслед за решением. Разработчики Git могли задать направление, но каждый удалённый сервис и каждая библиотека контролировали часть пути. Между чертежом 2018 года и предостережением 2026 года лежит не бюрократическая пауза, а стоимость согласования уже работающего графа. Имя здесь является частью данных и частью чужого интерфейса.