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

Видео урок: Внесение, получение изменений и возврат

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

ОК, у нас есть хранилище, есть проект, есть проект Visual Studio, давайте добавим несколько файлов и внесем их в систему. В этом случае, мы вызываем контекстное меню для проекта и выберем меню Add - Class и назовем этот класс f1.cs. В нашем классе мы добавим функцию. Содержимое возьмем со страницы с сообщениями об ошибках из нового проекта о хайку. Мы выберем ту ошибку, с которой сталкивались мы все, прежде чем начали использовать систему контроля версий. Итак, давайте добавим сюда void func1() и оператор Console.WriteLine, который является эквивалентом C# для printf, With searching comes loss, and the presence of absence, My novel\" not found.

Теперь давайте посмотрим в Solution Explorer, что сообщает нам Visual Studio. Мы видим, рядом с ConsoleApplication1 есть красный флажок. Это значит, что файл был обновлен, и его нужно внести в систему. Вы видите, что рядом с f1.cs появился зеленый плюсик. Это означает, что файл был добавлен в систему контроля версий, но еще не внесен в хранилище. И, как мы видели раньше, например, если с Program.cs есть маленький голубой замок, это значит, что он внесен в хранилище и доступен только для чтения в рабочем наборе, пока вы не начнете вносить в него изменения, а также это значит, что в вашем рабочем наборе этот файл обновлен и соответствует тому, который находится в хранилище.

Итак, чтобы внести его в хранилище, мы вызываем контекстное меню для проекта, ConsoleApplication1, а затем выбираем Check In. Visual Studio, конечно, всегда требует от вас сохранить все файлы, прежде чем вносить их в систему, поэтому мы нажмем Yes. Теперь мы возвращаемся к вкладке Pending Changes. Здесь мы видим целый ряд элементов. Мы видим, что мы находимся в командном проекте TFS1, и вы можете увидеть все детали при наведении курсора. Здесь есть два изменения, и в этом дереве отображаются файлы, которые были изменены.

ConsoleApplication1.csproj должен быть обновлен, а f1.cs - добавлен. В комментарии мы введем Add Func1 и нажмем Check In, и появится сообщение Changeset 11 successfully checked in. Давайте вернемся в Source Code Control Explorer и просмотрим статус того, что здесь происходит. Мы перейдем к этой папке, вызовем для нее контекстное меню и выберем View History. Теперь, как мы это делали в Git в нашем начальном прогоне, мы просмотрим логи, которые, по существу, не отличаются от логов в Git, вот набор изменений 10, в котором мы сделали начальную фиксацию, и набор изменений 11, в котором мы добавили функцию 1.

Вы можете кликнуть правой кнопкой мыши здесь и выбрать Changeset Details, и здесь вы увидите, что мы добавили f1.cs и обновили проект. Если мы нажмем на него и выберем Changeset Details, Team Explorer теперь покажет нам, что мы добавили все эти файлы. Давайте закроем панель истории и вернемся к нашему f1.cs и в Solution Explorer. Мы внесем изменения, чтобы увидеть отслеживание версий в действии. Мы откроем этот файл снова и изменим строку My Novel на Website. Теперь давайте сохраним файл.

Эта кнопка сохраняет отдельный файл, а эта кнопка сохраняет все, так что я, как правило, нажимаю Сохранить все, прежде чем выполнять что-либо в системе контроля исходного кода, чтобы не пришлось закрывать все эти диалоговые окна или случайно не забыть сохранить файлы. Итак, еще раз, мы перейдем сюда, вызовем контекстное меню и выберем Check In. Опять же появляется диалоговое окно Pending Changes, и мы вводим Changed My Novel to Website и нажимаем Check In. Но прежде чем мы нажмем Check In, я хочу обратить ваше внимание на особенность TFS, которой нет в других системах контроля исходного кода.

Так как TFS блокирует файлы, когда вы извлекаете их из системы для редактирования, иногда кому-нибудь необходимо внести изменения в файл, прежде чем вы закончите работу над ним, и в этом случае вы можете использовать функцию откладывания изменений (Shelve). Функция Shelve позволяет сохранить ваши ожидающие изменения и добавить из в отложенный набор (Shelf Set), что по существу является временным внесением изменений, поэтому вся ваша работа сохраняется на центральном сервере, но сам код не изменяется, поэтому кто-то еще может извлечь его из системы и внести свои изменения.

В этом случае, мы не собираемся использовать откладывание изменений и нажмем Cancel. Мы собираемся внести изменения в систему, но эта функция может быть невероятно удобной в подобных системах, в которых есть централизованный сервер и блокировка файлов. ОК. Теперь у нас есть набор изменений 12. Опять же, мы вернемся в Source Code Control Explorer и откроем историю, и здесь вы можете увидеть initial Changeset, Add Func1, Changed My Novel to Website. Если мы выберем два набора изменений, например, 12 и 11, мы можем щелкнуть по ним правой кнопкой мыши и выбрать Compare.

Это диалоговое окно открывается потому, что вы можете выбрать разные опции для сравнения, мы не будем вникать во все детали, что, но это может помочь, если у вас будет много файлов, вы сможете отфильтровать по определенным типам файлов и так далее. В этом случае, мы просто нажмем ОК и просмотрим различия, и вы можете видеть, что эти две строки разные. Если мы сейчас сравним файлы, мы получим визуальное сравнение и увидим, что My Novel был изменен на Website. Следует отметить, что набор изменений, конечно, может содержать сотни или тысячи файлов файлов, если вы работали над ним в течение нескольких дней или недель.

Итак, в наборе изменений сначала вы увидите уровень различий папок, потому что вы, возможно, добавили или удалили папки, а затем, когда вы выйдете из этого уровня, как мы видели здесь, вы можете сравнить отдельные файлы. Итак, мы закроем эти окна и продолжим. Теперь давайте сделаем еще одно изменение. Закроем панель истории, вернемся к нашему файлу и изменим Website на Webpage. Теперь мы не будем вносить изменения, но попробуем просмотреть различия.

Итак, мы вернемся в Solution Explorer, вызовем здесь контекстное меню выберем Сompare и мы сравним нашу версию в рабочем наборе с последней версией и нажмем ОК. И опять же, мы увидим окно с визуальной дифференциацией, в котором видно, что в версии сервера есть слово Website, а в нашей текущей версии, которая еще не внесена в систему, есть слово Webpage. Чтобы отменить это изменение, нам нужно только закрыть это окно, вернуться в Visual Studio и выбрать отмену.

Теперь давайте вернем здесь Webpage и сохранить файл. Если мы посмотрим на Solution Explorer, мы увидим красную галочку рядом с f1.cs. Но что, если после того, как мы сохранили файл в локальном рабочем наборе, но до того, как внесли его в TFS, мы решили, что не хотим делать это изменение? Вы можете перейти сюда, кликнуть правой кнопкой мыши по файлу, перейти к меню Source Code Control и выбрать Undo Pending Changes. Вы получите это диалоговое окно, в котором сказано, что систем отменит все сделанные изменения в этом конкретном файле или файлах, которые вы выбрали.

Я нажму Undo Changes и увижу вопрос Undo check-out and discard changes? Я выберу Yes to All, и теперь вы можете видеть, что слово Webpage опять заменено на Website. Помните, что ни одно из изменений в хранилище не будет потеряно. Вы просто обновляете рабочий набор. Если мы перейдем к этому файлу, выберем из контекстного меню Source Control и View History, мы можем полностью вернуться к этой версии, если захотим. Мы можем выбрать Get This Version или Rollback Entire Changeset.

Итак, Get This Version позволит нам, например, выбрать ту версию, в которой все еще был My Novel. Помните, что вы ничего не потеряли. Мы можем вернуться сюда, выбрать Get This Version и опять вернуться к версии с Website. Итак, это базовый рабочий процесс при работе с файлами в TFS. Вы просто редактируете файлы, Visual Studio автоматически извлекает их из системы, вы вносите их с помощью панели Pending Changes, и в окне History вы можете проводить дифференциацию и возвращаться к другим наборам изменений.

Теперь давайте перейдем к созданию меток в TFS, а после этого рассмотрим ветвление и слияние.