Спонсор: Microsoft
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 805 / 25 | Оценка: 4.43 / 3.71 | Длительность: 10:46:00
Дополнительный материал 3:

Вопросы и ответы: система управления исходным кодом и версиями TFS

Как гарантировать соблюдение политики?

Система управления версиями не препятствует перекрытию политики, но позволяет фиксировать этот факт:

  • при помощи службы событий Team Foundation Eventing Service из Team Foundation Core Services API, отслеживая события возврата;
  • написав метод Notify для анализа свойств набора изменений, который будет реагировать на факт перекрытия.

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

Дополнительные ресурсы

Как пользоваться проверкой возврата после правки?

Политики возврата после правки могут также применяться в качестве системы проверки возвращаемого кода. В комплект TFS входят политики, проверяющие перед возвратом истинность следующих утверждений:

  • с изменением связан рабочий элемент;
  • пройдены все модульные тесты;
  • успешно проведен статический анализ.

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

Дополнительные ресурсы

  • Дополнительную информацию о создании и настройке политик возврата после правки вы найдете в статье "Walkthrough: Customizing Check-inPolicies and Notes" по адресу http://msdn2.microsoft.com/en-us/library/ms181281(VS.80).aspx.

Приведет ли к нарушению синхронизации переименование или удаление файлов на диске?

Да. Если вы случайно удалили файлы или папки, сервер TFS будет по-прежнему считать, что на локальном компьютере присутствуют их последние версии. Это означает, что команда get latest version не вернет удаленные файлы обратно на диск. Восстановить утраченные файлы и папки поможет команда force get.

Если вам нужно переименовать или удалить файлы, делайте это средствами Source Explorer. При этом локальные изменения будут синхронизированы с сервером.

Как работает система автоматического разрешения конфликтов?

В результате выполнения операций change, merge или get может возникнуть конфликт. Одним из способов его разрешения является автоматическое разрешение конфликтов Visual Studio. Оно сработает только в том случае, если файлы не являются двоичными и не имеют перекрывающихся изменений (изменений, примененных к одной и той же строке кода). В этом случае в новую версию переносятся изменения из обеих версий файла.

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

Дополнительные ресурсы

Как разрешать конфликты вручную?

Для разрешения конфликтов слияния используйте инструментарий слияния Visual Studio. Конфликт, обнаруженный во время слияния, можно разрешить как автоматически, так и вручную. При ручном разрешении конфликта вы вольны сохранить изменения из исходного файла, из конечного файла или разрешить конфликты при помощи инструмента слияния.

Разрешать конфликты приходится во время слияния между ветвями, при извлечении файлов в рабочую область или при возврате новых версий файлов. Существует три типа конфликтов:

  • Версии Файл изменялся несколькими различными способами, например, в результате редактирования, переименования, удаления или отмены удаления.
  • Коллизия имен файлов Два или несколько элементов пытаются занять одно положение.
  • Локальная перезапись Возникает только при выполнении операции get, когда происходит попытка перезаписать редактируемый файл. Большинство конфликтов разрешается автоматически. Единственный вид конфликтов, возникающий при ручном слиянии, - конфликт версий. Чаще всего ручное слияние необходимо в следующих ситуациях:
    • В двух ветвях выполнено редактирование файла, затронувшее одинаковые строки кода.
    • Производится слияние без основы, при котором TFS не известны связи файлов ветвей.

Инструмент слияния отображает подробности для каждого конфликта и позволяет выбрать изменение, которое следует после слияния сохранить в конечном файле. Вы вольны сохранить изменения источника или целевого файла, объединить изменения или вручную модифицировать окончательную версию, непосредственно отредактировав файл. После разрешения всех конфликтов в файле сохраните окончательную версию как ожидающее изменение, которое предстоит вернуть в целевую ветвь.

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

Дополнительные ресурсы

Как избежать конфликтов?

Большинство конфликтов разрешается автоматически при помощи системы управления версиями Team Foundation. Ситуации, в которых вам, скорее всего, предстоит выполнять слияние вручную (и которых по этой причине следует избегать), связаны с перекрывающимися изменениями в одних и тех же строках кода или одновременной работой трех и более разработчиков над одним и тем же файлом.

Просмотр ожидающих изменений

Чтобы просмотреть ожидающие изменения в выбранной области, выполните следующие действия:

  1. В окне Source Control Explorer щелкните правой кнопкой решение, проект, файл или папку, ожидающие изменения для которых хотите просмотреть.
  2. Выберите команду View Pending Changes.

Если вы извлекаете файл для редактирования при помощи командной строки, система проинформирует вас о том, какие еще пользователи извлекли этот файл и каковы внесенные ими ожидающие изменения. В приведенном ниже примере для правки извлекается файл Math.cs. Система TFS уведомляет вас, что над этим файлом уже работают два других пользователя (Джеймс и Салли). В уведомлении указан тип ожидающих изменений в рабочих областях обоих пользователей ( Edit и Rename ), и подтверждается тот факт, что локальная версия файла (в текущей рабочей области) не основана на последней версии из хранилища.

c:\dev\projects\calc\src>tf edit math.cs ExplorerScc.cs $/MathProject/dev/calc/src/math.cs:
opened for edit in Workspace21;contoso\james
opened for rename in WS24;contoso\sally
newer version exists in the repository

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

Дополнительные ресурсы

  • Дополнительную информацию о просмотре ожидающих изменений в собственной рабочей области вы найдете в статье "How to: View and Manage All Pending Changes in Your Workspace" по адресу http://msdn2. microsoft.com/en-us/library/ms181400(VS.80).aspx.
  • Дополнительную информацию о просмотре ожидающих изменений в чужой рабочей области вы найдете в статье "How to: View Pending Changes in Other Workspaces" по адресу http://msdn2.microsoft.com/en-us/library/ ms181401(VS.80).aspx.

Извлечение, получение и блокировка

  • Как узнать, кто изменял файл последним?
  • Как работает команда get?
  • В чем разница между совместным и исключающим извлечением?
  • Когда следует использовать команду lock?
  • Какие типы блокировок поддерживает TFS?

Как узнать, кто изменял файл последним?

Установить, кто последним изменил файл, позволяет его история. Щелкните файл правой кнопкой в окне Solution Explorer и выберите команду View History. Откроется окно History со списком последних изменений и именами пользователей, которые их внесли. Последний разработчик, изменявший данный файл, отображается в верхней части списка. Просмотреть историю файла можно также из командной строки. Для этого используется команда history утилиты tf.exe.

Дополнительные ресурсы

Как работает команда get?

Команда get служит для синхронизации файлов на вашем компьютере с файлами на сервере Team Foundation Server. Получив команду get, Visual Studio выполняет следующие действия:

  1. Сервер устанавливает, какие файлы устарели, на основе информации о том, какие версии имеются на вашем жестком диске.
  2. Сервер сообщает клиенту о том, какие обновления требуются в рабочей области.
  3. Клиент выполняет загрузку, перемещение и удаление файлов, а затем сообщает серверу о выполненных действиях.

Здесь предполагается, что у вас для повышения производительности установлен TFS -прокси. Операция get не помечает файлы для редактирования и по умолчанию не переписывает файлы, извлеченные вами для редактирования.

Дополнительные ресурсы

В чем разница между совместным и исключающим извлечением?

Система управления исходным кодом Team Foundation Server поддерживает как общее, так и исключающее извлечение.

Исключающее извлечение (exclusive checkout) не позволяет другому пользователю извлекать файл для правки, пока вы не вернете файл в систему управления исходным кодом. Это может привести к замедлению процесса разработки.

По умолчанию система TFS позволяет извлекать для правки один и тот же объект одновременно нескольким пользователям. Модель совместного извлечения ( shared checkout ) позволяет нескольким разработчикам трудиться в своих рабочих областях над копиями одного и того же файла. Система TFS "знает", какая версия находится в рабочей области данного разработчика, и этот разработчик должен будет разрешить конфликты до возврата объекта.

В большинстве сред коллективной разработки вероятность того, что вы в своей рабочей области внесете изменение, конфликтующее с ожидающим изменением в рабочей области другого разработчика, невелика. Большинство конфликтов в рабочих областях разрешаются системой TFS автоматически. Если конфликт не удается разрешить автоматически, воспользуйтесь командой resolve, которая позволит решить, чье изменение следует сохранить (ваше или другого разработчика).

Дополнительные ресурсы

Когда следует использовать команду lock?

Используйте команду lock (блокировка), чтобы запретить другим пользователям извлекать или возвращать изменения, пока вы не снимете блокировку с файла, над которым они работают. Файл следует блокировать, только если вы опасаетесь возникновения конфликта, требующего выполнения сложного ручного слияния. Большинство конфликтов может быть разрешено автоматически, поэтому не увлекайтесь блокировкой.

Дополнительные ресурсы

Какие типы блокировок поддерживает TFS?

В системе Team Foundation Server предусмотрены блокировки двух типов: блокировка возврата после правки и блокировка извлечения кода для редактирования. Когда вы применяете блокировку возврата, пользователи попрежнему могут вносить локальные изменения в объект, расположенный в других рабочих областях. Однако эти изменения нельзя будет вернуть на сервер, пока вы явно не снимете блокировку или не вернете файл после правки.

Блокировка извлечения является более жесткой, чем блокировка возврата. Применив блокировку извлечения к файлу или папке системы управления исходным кодом, вы запрещаете пользователям как извлечение файла для редактирования, так и возврат ранее сделанных ожидающих изменений. Нельзя применить блокировку извлечения к объекту, у которого в данный момент имеются ожидающие изменения.

Дополнительные ресурсы

Игорь Хан
Игорь Хан
Узбекистан, Ташкент, Ташкентский педагогический институт иностранных языков, 1990