109: Концепция/Версионирование
- Требует:
- Открывает возможности для:
Это способ нумерации версий, где номер похож на адрес с точками (например, 1.2.feature-x.3
). Он объединяет в себе обычные обновления, экспериментальные «ветки» и черновики в единую, древовидную систему.
У любой системы, которая постоянно меняется, есть две главные задачи: как-то отслеживать эти изменения (версионирование) и позволять нескольким людям работать над разными вещами одновременно (ветвление). Этот документ описывает, как мы объединили эти две идеи в одну, чтобы создавать и экспериментировать было просто и безопасно.
Из чего состоит адрес: иерархические версии
Уникальный адрес Идеи в нашей системе состоит из её пути
(текстового имени, например articles/common/button
) и версии
. Версия — это не просто число, а целая история эволюции Идеи, записанная через точки. Для полной ясности к адресу добавляется домен (например, my-project.com
), который создаёт уникальное пространство, где этот путь существует.
Например, версия 1.2.feature-x.3
рассказывает нам, что это третья попытка в рамках экспериментальной ветки feature-x
, которая, в свою очередь, отделилась от основной версии 1.2
. Такая структура изящно совмещает в себе и обычные версии, и ветки для экспериментов.
Версия — это как адрес в виде дерева (
1.2.feature-x.3
), который хранит всю историю и состояние Идеи.
Кто что видит: ветки и путь поиска
Версия показывает историю и состояние Идеи, а модель ветвления определяет, кто и где может её увидеть. Это работает с помощью двух понятий: веток и пути поиска.
Ветки: «Где» находится идея
Каждая версия Идеи в базе данных связана с одной или несколькими ветками (например, ["main", "feature/new-billing"]
). Ветки — это как каналы, которые определяют, кому видна идея. Идея будет видна пользователю или программе, только если она опубликована хотя бы в одной из веток, указанных в их пути поиска.
Путь поиска: «Как» её найти
Настоящая сила системы — в пути поиска. Это список названий веток, упорядоченный по важности. Он говорит системе, где и в каком порядке искать Идею. Например, во время разработки путь поиска может быть таким: ['feature/my-new-idea', 'staging', 'main']
Такая настройка создаёт систему слоёв, как в фотошопе:
- Сначала система ищет Идею, опубликованную в ветке
feature/my-new-idea
. - Если не находит, ищет в ветке
staging
. - И только если там её нет, берёт версию из главной, стабильной ветки
main
.
Это позволяет разработчику видеть мир, в котором его изменения наложены поверх стабильной системы. Ему не нужно копировать всё окружение, он видит только свою работу в контексте общего целого.
Видимость контролируется ветками, которые определяют, где видна Идея. Путь Поиска (
['feature-x', 'main']
) — это список с приоритетами, который говорит системе, где и в каком порядке искать. Это создаёт удобные «слои», показывая экспериментальную работу поверх стабильной системы.
Как меняются версии
Версии состоят из ревизий. Они бывают числовые для последовательных, публичных версий (например, 1.2
) или именованные для веток разработки (например, feature-x
). Версии могут меняться двумя способами:
- Совместимые изменения: Если правка ничего не ломает, создаётся новая маленькая ревизия (например,
1.2
становится1.2.1
). - Несовместимые изменения: Если правка что-то ломает, номер версии должен измениться на более высоком уровне. Изменение, несовместимое с версией
1.2
, создаст новую версию1.3
. Система сама находит такие несовместимости, анализируя изменения в структуре данных. Это гарантирует, что номера версий всегда отражают реальную совместимость, и никому не нужно угадывать.