Ветвление в контроле версий и управлении конфигурацией программного обеспечения — это дублирование объекта, находящегося под контролем версий (например, файла исходного кода или дерева каталогов ). После этого каждый объект можно модифицировать отдельно и параллельно, чтобы объекты стали разными. В этом контексте объекты называются ветвями . Пользователи системы контроля версий могут разветвлять любую ветку.
Ветви также известны как деревья , потоки или кодовые линии . Исходную ветвь иногда называют родительской ветвью , вышестоящей ветвью (или просто вышестоящей ветвью , особенно если ветви обслуживаются разными организациями или отдельными лицами) или резервным потоком .
Дочерние ветки — это ветки, у которых есть родительский элемент; ветвь без родительского элемента называется магистральной или основной линией . [1] Ствол также иногда условно называют HEAD, но на самом деле заголовок относится не к ветке, а к самому последнему коммиту в данной ветке, и как ствол, так и каждая именованная ветвь имеют свою собственную голову. Обычно ствол считается основой проекта, на котором ведется разработка. Если разработчики работают исключительно над стволом, он всегда содержит самую последнюю передовую версию проекта, но поэтому может быть и самой нестабильной версией. Другой подход — отделить ветку от магистрали, внести изменения в эту ветку и объединить изменения обратно в магистраль, когда ветвь окажется стабильной и работоспособной. В зависимости от режима разработки и политики фиксации ствол может содержать наиболее стабильную, наименее стабильную или что-то промежуточную версию. Другие термины для магистральной линии включают базовую линию, основную линию и главную линию, хотя в некоторых случаях они используются в схожем, но разном смысле – см. раздел « Контроль версий» § Общая терминология . Часто основная работа разработчиков происходит в стволе, а стабильные версии разветвляются, а случайные исправления ошибок переносятся из веток в ствол. Когда разработка будущих версий выполняется в немагистральных ветвях, это обычно делается для проектов, которые не меняются часто или где ожидается, что разработка изменения займет много времени, прежде чем оно будет готово для включения в магистраль.
Ветвление обычно подразумевает возможность последующего объединения или интеграции изменений обратно в родительскую ветку. Часто изменения сливаются обратно в ствол, даже если это не родительская ветка. Ветвь, не предназначенная для слияния (например, потому что она была повторно лицензирована третьей стороной по несовместимой лицензии или пытается служить другой цели), обычно называется форком .
Филиалы позволяют параллельно разрабатывать части программного обеспечения. [2] Крупные проекты требуют заполнения многих должностей, включая разработчиков, менеджеров по сборке и сотрудников по обеспечению качества . Кроме того, может потребоваться поддержка нескольких выпусков для разных платформ операционных систем. Ветки позволяют участникам изолировать изменения, не дестабилизируя кодовую базу, например, исправления ошибок, новые функции [ 3] и интеграцию версий . Эти изменения могут быть позже объединены (повторно синхронизированы) после тестирования.
Ветка разработки или дерево разработки программного обеспечения — это версия, которая находится в стадии разработки и еще не выпущена официально . В сообществе открытого исходного кода понятие выпуска обычно метафорично, поскольку любой желающий обычно может проверить любую желаемую версию, независимо от того, находится она в ветке разработки или нет. Часто версию, которая в конечном итоге станет следующей основной версией, называют веткой разработки. Однако зачастую в данный момент времени разрабатывается более одной последующей версии программного обеспечения.
Некоторые системы контроля версий имеют специальный жаргон для основной ветки разработки. Например, в CVS она называется «MAIN». Git по умолчанию использует «master», хотя GitHub [4] [5] и GitLab перешли на «main» после убийства Джорджа Флойда . Более общий термин — «ствол».
В CVSNT теневая или магическая ветвь «затеняет» изменения, внесенные в вышестоящую ветвь, чтобы облегчить поддержку небольших изменений (cvc — это система сборки пакетов с открытым исходным кодом, включающая систему контроля версий для пакетов, созданных рПуть .)
При распределенном контроле версий весь репозиторий с ветвями можно скопировать и работать над ним дальше. Monotone (mtn), Mercurial (hg) и git называют это «клоном»; Базар называет это «филиалом». [ нужна цитата ]
В некоторых распределенных системах контроля версий , таких как Darcs , не проводится различие между репозиториями и ветвями; в этих системах получение копии репозитория эквивалентно ветвлению.