понедельник, 19 мая 2008 г.

Звездная команда (Часть 4). Понимание представлений.

Сегодня я подробнее расскажу о представлениях (View), которые реализованы в Starteam. Но прежде я хотел бы сделать несколько замечаний про терминологию, которая используется в статье. Во многих системах контроля версий для обозначения копии файла, полученного в результате изменения оригинала используется слово "Версия" (Version). Собственно, отсюда и возникло название таких систем. И Starteam в этом случае не исключение, только версии файла в Starteam называются Revision (что тоже, в общем-то, интуитивно понятно). Кроме простой версионности в Starteam реализовано так называемое ветвление (Branching), которое позволяет рассматривать версии файлов в рамках некого дерева изменений, имея несколько актуальных версий изменяемого элемента (файла, требования и т.п.) на разных ветках этого дерева. Поэтому полный номер версии элемента определяется атрибутом Branch revision, который представляет собой композицию номеров версий файла и ветки. Т.о. когда в статье идет речь про ветвление, то это автоматически подразумевает и версионность элемента.
Когда Вы создаете проект, Вы также создаете начальное или корневое представление этого проекта. В процессе работы над проектом также может быть создано несколько представлений дополнительно. Зачем они нужны? Представления позволяют реализовать очень важную функциональность сервера Starteam – отображать только определенные элементы, входящие в его состав. Причем, критерием отбора могут являтся не только обычные атрибуты элемента, вроде имени и типа, но и дата создания и изменения, версия элемента и т.д. Другими словами, Вы можете конфигурировать представление так, чтобы показать элементы, существовавшие раньше или позже определенного события, на конкретный момент времени, базирующиеся на специальной метке или находящиеся в некотором состоянии. В зависимости от своего назначения можно классифицировать представления по нескольким типам:

1) Представления, динамически отображающие изменения исходного кода и документов в вашем проекте (Dynamic view). Заданное по умолчанию корневое представление относится как раз к этой категории. Оно позволяет вам видеть все файлы и другие элементы проекта «как есть» на текущий момент времени. Представление этого типа отображается, когда Вы выбираете в меню View > Select Configuration > Current Configuration.
2) Изменяемое представление – ссылка (Reference view). Под ссылкой в данном случае следует понимать ссылку на подмножество элементов, найденных в первоначальном представлении. Такое представление часто содержит только элементы, представляющие интерес для определенной группы разработчиков. Любое изменение, сделанное в представлении этого типа изменяет тот же самый элемент в первоначальном представлении. Это происходит потому, что представление содержит ссылки к элементам в первоначальном представлении и не ветвится (см. ниже), когда происходят изменения.
3) Неизменяемое представление-ссылка (RO reference view). Оно основано на определенном состоянии первоначального представления. Такое представление-ссылка создается обычно для удобства поиска конкретных ревизий элементов, используемых в определенных релизах программы. Оно может быть "плавающим" или жестко привязан к определенной дате. Представления этого типа используются в основном для того, чтобы можно было легко восстановить старые версии программы.
4) Представления, разрешающее выполнять ветвление элементов (Branch all view. Также часто их называют версионными). Ветвящиеся представления можно использовать, чтобы изменить элементы, найденные в определенном представлении, не затрагивая эти элементы в других представлениях. Таким образом, мы можем создать несколько ветвящихся представлений в одном проекте и работать над разными версиями программы параллельно, не вызывая конфликтов. Поэтому, ветвящееся представление должно использовать рабочую папку, отличную от рабочей папки ее родительского представления. Использование той же самой рабочей папки для обеих представлений не только запутывает, но и может создать серьезные проблемы. Например, изменения в файлах одного представления могут быть затерты, когда Вы выгружаете файлы из БД от другого представления. Эта происходит потому, что два этих файла имеют одинаковые названия и рабочую папку. Или же состояние файла на клиенте может быть определено неправильно и ввести пользователя в заблуждение. Например, StarTeam может сообщить о состоянии файла в одном представлении как "Неизвестное", "Устаревшее" и т.д., когда действительное состояние файла "Отсутствует", и файл от другого представления с тем же самым названием находится в рабочей папке. Следует отметить, что благодаря своим своствам ветвящиеся представляния - самые востребованные производные представления в Starteam. Обычно, разработчики используют исключительно их.
5) Неветвящееся представление (Branch None view). Этот тип представления, как и ветвящееся представление, основывается на некотором родительском представлении. Как следует из его названия – элементы данного представления не ветвятся при их изменении.
6) Непроизводное представление (Non-derived view). Это самостоятельное представление, которое не наследуется от какого-либо другого представления. Соответственно, оно по умолчанию создается пустым и все элементы в него добавляются по желанию пользователя.
Теперь давайте подробнее рассмотрим наиболее интересные и полезные ветвящиеся представления. Ветвящееся представление - представление, которое разрешает папкам, и другим элементам в представлении отделиться от соответствующих элементов в родителе и, начиная с этого момента, стать изменяемой копией родителя. Ветвление применяется только к папкам, файлам, и запросам на изменение. При этом можно настроить представление так, чтобы определенные его элементы не ветвились. Требования, задачи и обсуждения не ветвятся никогда. Изменения таких элементов можно осуществить в представлении, в котором они были созданы, в представлении, в которое они были перемещены или расшарены, или в "плавающем" дочернем представлении, предназначенном только для чтения. Новые ревизии таких элементов могут быть рассмотрены в любом "плавающем" дочернем представлении.
Пока элемент не ветвится, соответствующие элементы в обоих представлениях остаются идентичными. После того, как пользователь изменил элемент, появляется новая ветвь или, как ещё говорят, версия этого элемента, и они больше не являются идентичными. При этом номер ревизии элемента указывает на новую ветвь. Единственный способ снова сделать элементы идентичными состоит в том, чтобы вручную объединить их, сравнивая и объединяя представления с помощью команды Compare/merge views. После того, как происходит ветвление, StarTeam больше не посылает и не применяет обновления от соответствующего элемента в родительском представлении. Из соображений безопасности, удаления, сделанные в родительском представлении не размножаются к дочернему представлению и наоборот. Если Вы хотите удалить папку или элемент изо всех связанных представлений, Вы должны удалить их из каждого представления в отдельности.
Ветвящиеся представления предназначены для различных целей:
1) Выполнение разнообразных потребностей в зависимости от ваших задач. Например, можно создать исправленную версию или заказную версию вашей программы, ответвленную от предшествующего коммерческого релиза.
2) Начало разработки следующего релиза вашей программы, используя некоторые или все файлы от предыдущего выпуска.
3) Хранение части вашего проекта приватно, пока она полностью не закончена и не протестирована. Когда потребуется, Вы можете объединить ваши изменения с основным проектом.
(продолжение следует)

2 комментария:

Анонимный комментирует...

Спасибо за статьи.

ps. url блога режет корпоративный firewall по подстроке "sex" :-(

Mikhail Mokhov комментирует...

Спасибо за отзывы! ;)
По поводу Sex. Да, проблема присутствует, даже некоторые поисковики смотрят на это дело косо. Хотя, обычное в общем-то слово, обозначающее пол. =) Похоже, есть только одно полноценное решение - сменить название блога...