В этой лекции представлены стратегии ветвления и слияния для некоторых типичных сценариев. Как правило, ветвление нужно для поддержки выпусков или параллельных разработок.
Во многих простых сценариях ветвление не требуется. Вполне достаточно помечать сборки. Например, при помощи метки можно в любой момент заново создать сборку или выяснить, какие версии исходного файла были использованы при создании той или иной сборки. Следует подумать о ветвлении, если вам требуется изолирование параллельных групп для работы над разными, но перекрывающими функциями или для поддержки выпуска.
Чтобы в целом познакомиться с ветвлением и слиянием, читайте лекцию от начала до конца. Так вы узнаете о различных стратегиях ветвления и различных сценариях, при которых ветвление имеет смысл. Если вас интересует конкретный сценарий, перейдите к соответствующему разделу.
Ниже представлены примеры сценариев, в которых может потребоваться создание ветвей и выполнение слияний:
Не выполняйте ветвление без необходимости, поскольку оно добавит вам работы по обслуживанию дополнительного дерева исходного кода и по слиянию. Большинство групп разработчиков, создающих коммерческие приложения, работают по короткому циклу выпуска и не нуждаются в ветвлении. Команды разработчиков, работающие с более продолжительными циклами, например, независимые поставщики ПО, чаще нуждаются в ветвлении.
При использовании одного потока разработки или осуществлении инкрементного и непрерывного выпуска ветви следует создавать ветви, только если изменения часто приводят к сбоям и вносят неустойчивость в процесс разработки.
Ниже приведены наиболее типичные сценарии ветвления:
Вы можете столкнуться как с одним, так и с несколькими из этих сценариев. Используйте их в качестве ориентира.
В этом разделе приведены примеры папок, создаваемых в системе управления исходным кодом Microsoft Visual Studio® Team Foundation Server (TFS) при структурировании дерева кода по сценариям ветвления и слияния.
Main содержит главное дерево исходного кода. Здесь соединяются изменения из других ветвей.Development является ответвлением Main и используется для изолирования текущей разработки. Подобные ветви могут создаваться временно, например, для проверки рискованных изменений, без влияния на Main.Releases содержит ветви выпусков, которые уже осуществлены, и сейчас осуществляется поддержка клиентов. Она обеспечивает изоляцию текущей разработки, которая ведется в ветви Development, а также содержит ветвь текущего выпуска, которая отделена от Main и хранит версию, заблокированную до выпуска. В этой ветви вы готовите ПО к выпуску, тогда как остальные продолжают работать в ветви Development над новыми функциями.В следующих разделах на конкретных примерах показано использование ветвления в каждом из описанных сценариев.
Этот сценарий применяется, в основном, в небольших группах, где не нужна изолированная разработка. Помечая сборки, вы можете извлекать исходный код, соответствующий конкретной сборке. В ветвлении нет нужды, поскольку вы можете работать напрямую из папки Main. Ниже приводится структура папок в сценарии без ветвления:
{
My Team Project
Main
Source
}
В этом сценарии команда создает ветвь для стабилизации выпуска, а затем, после выпуска программы, производит слияние ветви с главным деревом исходного кода. Ниже приводится структура папок в сценарии ветвления выпусков:
} My Team Project Main ->Главная ветвь сборки Source Releases Release 1 ->Ветвь выпуска Source }
В этом сценарии вы создаете ветвь для сопровождения, чтобы не нарушить устойчивость текущих сборок. Далее показана структура папок с ветвлением для сопровождения. Она очень похожа на структуру с ветвлением для выпуска, однако сохраняется на более продолжительное время:
} My Team Project Main - >Главная ветвь сборки Source Releases ->Контейнер для ветвей сопровождения Release 1 ->Ветвь сопровождения Source Другие папки ресурсов Release 2 ->Ветвь сопровождения Source Другие папки ресурсов }
В этом сценарии вы создаете ветвь разработки на основе функций продукта, выполняете в ней работу, а затем производите слияние с главным деревом исходного кода. Ниже приводится структура папок в сценарии ветвления с целью разработки функциональных особенностей:
{
My Team Project
Development ->Изолированный контейнер ветвей разработки
Feature A ->Ветвь функции
Source
Feature B ->Ветвь функции
Source
Feature C ->Ветвь функции
Main ->Главная ветвь сборки
Source
}
Этот сценарий похож на сценарий ветвления по функциям, за исключением того что здесь вы организуете ветви разработки не по функциям конечного продукта, а в соответствии с подгруппами основной команды разработчиков. Иногда группы и функции точно соответствуют друг другу, но в других случаях группа может работать над несколькими функциями. Ниже приводится структура папок в сценарии ветвления по группам:
{
My Team Project
Development ->Изолированный контейнер ветвей разработки
Team 1 -> Ветвь группы
Feature A -> Изолированная ветвь разработки
Source
Feature B -> Изолированная ветвь разработки
Source
Team 2 -> Ветвь группы
Feature A -> Изолированная ветвь разработки
Source
Feature B -> Изолированная ветвь разработки
Source
Main -> Главная ветвь сборки
Source
}
Логическая структура выражает для каждой ветви отношения "родитель - потомок". Она может отличаться от физической структуры, отображаемой в Source Control Explorer. Например, в показанной выше физической структуре Development и Main являются папками одного уровня, тогда как с точки зрения логики Development является дочерней папкой Main.
На рис.5.1 показан пример логической структуры ветвлений и слияний.
(рис 5.1) Логическая связь ветвлений и слияний На рис.5.2 представлена типичная последовательность действий при ветвлении для выпуска.
(рис 5.2) Последовательность действий при ветвлении для выпуска Последовательность действий такова:
Main создается ветвь Release 1.Main, чтобы переместить серьезные исправления в главную ветвь сборки.RTM выпуск помечается с последующей слиянием с Main.SP1. Сборка помечается, выполняется слияние изменений с Main.Release 1 оставляется для поддержки SP1 и для последующих пакетов обновлений.Процесс повторяется для следующих выпусков.
Примечание Успешное применение ветвления для выпуска требует, чтобы вы точно выбирали ветвь, в которой будут применены исправления. При выпуске как простых исправлений, так и пакета обновлений следует сначала применять их в ветви текущего выпуска, а затем выполнить слияние с Main, чтобы исправления применялись и в последующих выпусках.
На рис.5.3представлена типичная последовательность действий при ветвлении для изолирования разработки. Последовательность действий такова:
Feature A для изолирования разработки первой функции.Feature B для изолирования разработки второй функции.Main по мере достижения контрольных вех, когда функцию можно объединять с главной сборкой для обеспечения доступа к ней других групп.Main с целью извлечения результатов работы других групп и уменьшения числа конфликтов при проведении последующих слияний.Main, а ветвь функции удаляется.
(рис 5.3) Последовательность действий при ветвлении для изолирования разработки
Проводя ветвление, имейте в виду следующее:
Решение о проведении ветвления в конечном итоге сводится к
Большие команды разработчиков с длительными циклами разработки, как правило, отличаются от небольших команд по следующим признакам:
В крупных командах чаще выполняется ветвление как по группам, так и по функциям. Как правило, в них также используются ветви для интеграции внешних зависимостей. Сложная структура ветвления увеличивает промежуток времени между изменением в ветви разработки и переносом этого изменения в главную ветвь сборки. Поэтому, создавая ветви, следует тщательно продумать стратегию слияния.
Далее перечислены соображения, которые нужно принимать в расчет, определяя, будут слияния проводиться по плану или при возникновении определенных событий:
Корректируйте стратегию ветвления и слияния столь же часто, как вы производите сборки. Более глубокая структура ветвления требует дополнительного времени на перенос изменений из дочерних ветвей в главную ветвь сборки. Далее перечислены признаки приближения связанных с этим проблем:
Если в вашей команде возникли эти проблемы, подумайте над уменьшением глубины ветвления.
Далее приведен пример сложной структуры ветвления:
{
My Team Project
Development ->Контейнер для изолирования активных ветвей разработки
Feature A ->Изолированная ветвь разработки
Source
Feature B ->Изолированная ветвь разработки
Source
Main ->Главная ветвь компоновки и сборки. Здесь сходятся все изменения.
Source
Папки с другими ресурсами
Releases ->Контейнер для текущего выпуска и ветвей сопровождения
Release 2 ->Активная ветвь сопровождения
Source
Папки с другими ресурсами
Release 3 ->Активная ветвь сопровождения
Source
Папки с другими ресурсами
Release 4 ->Ветвь с кодом, заблокированным до выпуска
Sourse
Папки с другими ресурсами
Архив
Release 1 ->Старый выпуск в архиве
Source
Папки с другими ресурсами
}
В данную структуру включены:
Ветви создаются для изоляции выпусков, для сопровождения предыдущего выпуска или для изоляции параллельной разработки. Не следует выполнять ветвление без особых на то причин.
Создавая ветви, логически структурируйте деревья так, чтобы слияния выполнялись только "по вертикали" (вверх и вниз по дереву), но не "по горизонтали". Слияние "по горизонтали" требует больше времени и чревато ошибками.
В больших командах структура ветвления более сложна. Готовьтесь к увеличению интервала времени, необходимого для переноса изменений из ветви разработки в главную ветвь сборки.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.