Введение

Разветвление, в системах контроля версий и управления конфигурацией программного обеспечения, — это создание копии объекта, находящегося под контролем версий (например, файла исходного кода или дерева каталогов). Каждая копия может затем изменяться независимо и параллельно, что приводит к их различию. В этом контексте эти копии называются ветвями. Пользователи системы контроля версий могут создавать ветви от любой другой ветви. Ветви также могут называться деревьями, потоками или кодовыми линиями. Исходная ветвь иногда называется родительской ветвью, восходящей ветвью (или просто восходящей, особенно если ветви поддерживаются разными организациями или разработчиками) или основной ветвью.

Комод

Дочерние ветви — это ветви, имеющие родительскую ветвь; ветвь без родителя называется стволом или основной линией. Ствол также иногда неформально называют HEAD, но корректно HEAD относится не к ветке, а к последнему коммиту в данной ветке, и как ствол, так и каждая именованная ветвь имеют свой собственный HEAD. Обычно ствол предназначен для использования в качестве основы проекта, на которой ведется разработка. Если разработчики работают исключительно со стволом, он всегда содержит самую последнюю версию проекта, но, следовательно, может быть и самой нестабильной версией. Другой подход заключается в создании ветви от ствола, реализации изменений в этой ветви и последующем слиянии изменений обратно в ствол, когда ветвь будет признана стабильной и работоспособной. В зависимости от режима разработки и политики коммитов ствол может содержать наиболее стабильную, наименее стабильную или промежуточную версию. Другие термины для обозначения ствола включают базовую ветвь, основную линию и master, хотя в некоторых случаях они используются в схожем, но различном значении. Часто основная работа разработчиков ведется в стволе, стабильные версии создаются как ветви, а отдельные исправления ошибок сливаются из ветвей в ствол. Разработка будущих версий обычно выполняется в ветвях, отличных от ствола, для проектов, которые не часто меняются, или когда ожидается, что изменение потребует длительного времени для разработки, прежде чем оно будет готово к включению в ствол.

Слияние

Разветвление обычно подразумевает возможность последующего слияния или интеграции изменений обратно в основную ветвь. Часто изменения объединяются обратно в основную линию разработки (trunk), даже если это не родительская ветвь. Ветвь, которая не предназначена для слияния (например, из-за перелицензирования под несовместимой лицензией третьей стороной или из-за преследования иной цели), обычно называется ответвлением (fork).

Мотивация к разветвлению

Ветви позволяют разрабатывать части программного обеспечения параллельно. Крупные проекты требуют привлечения множества специалистов, включая разработчиков, менеджеров сборки и сотрудников отдела контроля качества. Кроме того, может потребоваться поддержка нескольких релизов для разных операционных систем. Ветви позволяют участникам изолировать изменения, не нарушая стабильность кодовой базы, например, исправления ошибок, добавление новых функций и интеграцию версий. Эти изменения могут быть впоследствии объединены (синхронизированы) после тестирования.

Отрасль развития

Развитие ветки или дерево разработки программного обеспечения — это версия, находящаяся в разработке и ещё не прошедшая официальный релиз. В сообществе разработчиков открытого исходного кода понятие релиза обычно носит метафорический характер, поскольку любой пользователь обычно может получить доступ к любой желаемой версии, будь то в ветке разработки или нет. Часто ветка, которая в конечном итоге станет следующей основной версией, называется веткой разработки. Однако одновременно может разрабатываться несколько последующих версий программного обеспечения. Часто ветка разработки является основным стволом. Некоторые системы контроля версий используют специальную терминологию для обозначения основной ветки разработки. Например, в CVS она называется веткой "MAIN". Git по умолчанию использует "master", хотя GitHub и GitLab перешли на "main" после убийства Джорджа Флойда.

Теневые или магические ветви

В CVSNT теневая или магическая ветка "отслеживает" изменения, вносимые в основную ветку, чтобы упростить поддержку небольших изменений (cvc — это система сборки пакетов с открытым исходным кодом, включающая систему контроля версий для пакетов, создаваемых rPath).

Клоны репозиториев

В распределённых системах контроля версий весь репозиторий, включая ветви, может быть скопирован и продолжена работа над ним. Monotone (mtn), Mercurial (hg) и git называют это "клонированием"; Bazaar называет это "ветвью". В некоторых распределённых системах контроля версий, таких как Darcs, не проводится различий между репозиториями и ветвями; в этих системах получение копии репозитория эквивалентно созданию ветви.