VSTS: конфигурационное управление
Управление ветками. Для поддержки конфигурационного управления в системе контроля версий TFS реализовано две команды: создание ветви ( Branch ) и интеграция ветвей ( Merge ). Эти команды доступны на файлах и папках в системе контроля версий. При выборе команды создания ветви открывается диалог ( рис. 14.8), позволяющий выбрать путь, куда следует скопировать (ответвить) выбранные файлы. После выполнения этой команды в системе контроля версий по указанному пути создастся полная копия выбранных файлов.
Заметим, что после создания ветви она не попадает автоматически на сервер. Чтобы ветвь попала на сервер и стала доступна всем, необходимо выполнить операцию внесения изменений ( рис. 14.9).
Гораздо более сложной, как правило, является операция переноса изменений из ветви в ветвь. Для выполнение этой операции (команда Merge ) используется специальный мастер, позволяющий разработчику задать необходимые параметры слияния за несколько шагов.
На первом шаге ( рис. 14.10) разработчик задает откуда ( source branch ) и куда ( target branch ), а также изменения из какой области он хочет перенести (все вплоть до определенной версии, или только выбранные пакеты изменений).
В случае, если разработчик выбрал перенос всех изменений, ему предлагается выбрать версию исходной ветви вплоть до которой изменения нужно перенести ( рис. 14.11). Разработчик может выбрать полный перенос, перенос до определенной даты, все предшествующие определенному пакету изменения, либо интеграцию до тех версий, которые находятся в текущем локальном рабочем пространстве.
В случае, если разработчик выбрал интеграцию по пакетам изменений, ему предоставляется выбор среди не интегрированных пакетов ( рис. 14.12), и он может выбрать один или несколько из них.
Так же как и при создании новых ветвей, при выполнении интеграции необходимо в явном виде внести пакет изменений, применив к нему все настроенные правила и ассоциировав с соответствующим элементом работы.
Достаточно часто при интеграции может возникнуть ситуация конфликта изменений, когда интегрируемый файл поменялся в обоих ветвях независимо друг от друга. В этом случае система контроля версий открывает окно со списком обнаруженных конфликтов ( рис. 14.13) и предлагает выбрать способ разрешения.
Разработчик может выбрать автоматический способ разрешения, который сработает только для тех файлов, в которых были изменены разные части. В случае, если автоматическое разрешение невозможно, система откроет диалог ручного разрешения – см. рис. 14.14.
Для разрешения конкретного конфликта разработчик может выбрать несколько способов: автоматически объединить изменения (если возможно), принять изменения из исходной ветки, сохранить изменения целевой ветки или вручную разрешить все внутренние конфликты в специальном инструменте рис. 14.15.
Следует оговорится, что данный инструмент имеет достаточно ограниченную функциональность, поэтому некоторые разработчики предпочитаются использовать аналогичные инструменты других производителей.