Предыдущий ролик Следующий ролик  

Видео урок: Ветвление и слияние

Принципы контроля версий

Последняя важная функциональность, которую нам нужно исследовать в TFS, - это ветвление и слияние. Итак, ветвление и слияние в TFS выполняются немного по-другому, чем, скажем, в Git или Mercurial. TFS на самом деле создает новые папки в папке проекта. Итак, мы перейдем сюда к проекту, вызовем контекстное меню, выберем Branch и назовем ее branch1. Здесь вы можете видеть, что у нас есть два отдельных набора папок, этот и этот.

Как видите, что здесь система создала в разделе Folders новую ветку, напротив которой есть символ T, который указывает, что это новая ветка. Как и в некоторых других системах, ветка была создана, но она еще не находится в хранилище, пока мы не внесем ее в систему. Таким образом, мы перейдем сюда в Team Explorer, добавим комментарий Create Branch1 и внесем изменение в систему. Теперь у нас есть наша ветка, и, как видите, она на самом деле хранится в отдельной папке, в проекте в папке TFSSample-branch1, в то время как наш первоначальный проект хранится в FSVC1\ConsoleApplication1.

Чтобы перейти к ветке, мы открываем соответствующее решение с файлами Visual Studio. Так, например, мы переходим к ConsoleApplication1, под branch1, и дважды щелкаем по на ConsoleApplication1.csproj. Теперь может показаться, что мы находимся в том же месте, но если мы наведем на курсор на имя файла, вы увидите, что полное имя - TFS1\ TFSSample-branch1\ ConsoleApplication1\f1.cs. Итак, мы сделаем здесь изменение, вместо Node not found мы введем Dwarf not found и сохраним файл, а затем внесем его в систему с комментарием Change node to Dwarf.

Теперь мы вернемся в Source Code Explorer и выберем View History, и вы увидите, что у нас есть совершенно отдельный набор изменений для ветки. Итак, TFS отличается от Git и Mercurial тем, что в нем есть ряд наборов изменений для каждой ветки, которые полностью независимы друг от друга. Теперь, если мы хотим вернуться к другой ветке, к главной, мы можем перейти к ConsoleApplication1 и еще раз открыть ConsoleApplication1.csproj, и вы можете увидеть, не только мы вернулись к слову Node, но и если мы наведем сюда курсор, вы увидите, что мы опять находимся в каталоге FSVC1.

А теперь давайте сделаем что-нибудь в ветке, чтобы у нас было что объединять. Мы вернемся в Source Code Control Explorer, перейдем к ConsoleApplication1 в ветке и откроем проект снова. Теперь мы не только изменим node на Dwarf, но и добавим еще одну функцию, затем мы сохраним файл, внесем его в систему, и, опять же, если мы посмотрим историю для нашей ветке, вы можете увидеть Add func2.

Теперь давайте в Source Code Control Explorer, перейдем к главной ветке и откроем этот проект. Тогда мы снова перейдем в Source Code Control Explorer и выполним слияние. Итак, мы щелкаем правой кнопкой мыши по имени папки, переходим к Branching and Merging и выбираем Merge. Теперь система спросит нас, что мы хотим объединить, и, определенно, она позволяет решить, каким образом вы хотите это сделать. Теперь на нашем случае мы видим неправильное направление. При том, как операция настроена сейчас, мы будем сливать нашу главную ветку в branch1.

Мы хотим пойти в другом направлении. Таким образом, мы нажимаем Browse и выбираем branch1 в качестве источника, и вы можете видеть, что целевая ветка обновилась автоматически, потому что TFS достаточно умен, чтобы знать, у нас есть только две ветки. Если бы это было не так, мы бы нажали Browse и выбрали основную ветку. Теперь мы нажимаем Next и система спрашивает, какой тип слияния мы хотим выполнить. Хотим ли мы выполнить слияние с последней версией, с определенным набором изменений, меткой или датой? В этом случае, мы будем использовать последнюю версию. Мы видим сообщение, что вся необходимая информация собрана, и слияние может быть выполнено.

Мы нажимаем Finish, и слияние сделано. Теперь система говорит нам, что файл был изменен вне редактора, потому что в редакторе была открыта версия из главной ветки, и когда мы сделали обновление, на самом деле обновился файл в каталоге Working Set на диске, но не в редакторе, так что мы нажимаем да, мы хотим его перезагрузить. И теперь, когда мы возвращаемся к f1.cs, вы можете видеть, что у нас не только есть Dwarf, потому что это изменение мы сделали в ветке, но еще и function 2, потому что мы успешно слили нашу ветку с главной веткой.

Если вы помните наш концептуальный обзор, это называется обратной интеграцией, так как мы по сути взяли содержимое из ветки и добавили его в главную ветку. Теперь, если вы продолжите работать в ветке в течение длительного периода времени, вы захотите делать прямую интеграцию, то есть, то же слияние в противоположном направлении, из главной ветки в вашей частную, причем делать это достаточно регулярно, например, еженедельно, чтобы ваша частная ветка не слишком отставала от изменений, которые другие люди делают в главной ветке.

По сути, это все, что касается TFS. Поскольку мы использовали TFS только из GUI, то у нас не будет специальных уроков про графический интерфейс и оболочную интеграцию, потому что TFS полностью интегрируется в Visual Studio. Надеюсь, вам понравился этот обзор. Microsoft предоставляет тонны дополнительной документации, видео на Channel 9, много информации, которая поможет вам понять, как более эффективно использовать Team Foundation Server.