
Блог
ashamray
Блог
ashamray



TFS Branching Guide 2,0 довольно интересная сборка планов ветвления, которые основаны на практике применения Team Foundation Server. Будет полезно как пользователям TFS, так и интересно пользователям других систем версионного контроля. Страница проекта на CodePlex –
– Это главная статья, которая коротко рассказывает о концепции ветвления и показывает 3 основные модели ветвления
– Набор наиболее общих сценариев ветвления
– Частые вопросы и ответы
– Изображения различных видов ветвлений в различных форматах файлов
– Примеры лабораторных работ с пошаговыми инструкциями их выполнения
– Файлы для лабораторной работы «Single Release Single Maintenance»




Вопрос
Выполняя слияние между двумя ветвями с выбранной опцией «Все изменения до определенной версии», какой тип версии предпочтителен («Последняя версия» [по умолчанию], «Набор изменений», «Дата», «Метка» или «Версия рабочей области»)?
Ответ
В зависимости от выбранной опции будет определен различный набор изменений, как описано ниже:
Таким образом, т.к. присутствуют ограничения для опций «Метка» и «Версия рабочей области», не рекомендуется использовать слияние с этими опциями, если были изменения удаления.
Опция «Последняя версия» может использоваться, когда четко понятно, какие изменения будут содержаться в последней версии. Можно временно «заморозить» исходную ветвь на время проведения операции слияния с использованием блокировки до начала слияния.
Использование опций «Набор изменений» или «Дата» обеспечивает четкую контрольную точку для того, что будет объединено, и должно использоваться как правильное.
Дополнительные ресурсы

Вопрос
Можно ли удалять ветви?
Ответ
Удаление ветви не отличается от удаления любой папки системы управления версиями. Различие в том, что необходимо знать, не повлияет ли удаление ветви на дальнейшие операции слияния. Слияние в TFS возможно или на непосредственный родительский поток разработки, или на непосредственные дочерние ветви (если не выполняется слияние без базовой версии); таким образом, если промежуточный поток будет удален, то определенные пути слияния могут быть нарушены. Рассмотрим следующий пример:
Слияние от А к C возможно (от А к B, от B к C) как и слияние С к А (от C к B, от B к A). Однако если поток B будет удален, то дальнейшее такое слияние становится невозможным. Поэтому, если необходимо удалить папку ветви, то нужно определить, есть ли у нее какие-нибудь дочерние потоки, созданные от нее. Если такие потоки существуют, то лучше сделать ветвь невидимой с помощью разрешений системы управления версиями, что не ограничит будущие слияния, пока папка скрыта от конечного пользователя.
Дополнительные ресурсы

Вопрос
Что такое слияние без базовой версии и чем оно отличается от обычного слияния?
Ответ
Слияние без базовой версии позволяет объединять две папки, которые не связаны ветками, создаваемыми через команду branch клиента командной строки tf или с помощью Обозревателя управления исходным кодом. Как только слияние без базы будет один раз выполнено, то в дальнейшем между этими папками можно будет выполнять обычное слияние (как будто эти папки связаны ветками). Хотя слияние без базовой версии может быть полезно для двух логически связанных каталогов, но не связанных ветками, в нем есть определенные недостатки по сравнению с обычной операцией ветвления/слияния:
Из-за вышеупомянутых проблем связанных со слиянием без базовой версии, его рекомендуется использовать осторожно. Рекомендуется спроектировать структуру проекта так, чтоб избежать использования слияния без базовой версии.
Дополнительные ресурсы






Вопрос
Когда создается новый командный проект, когда нужно использовать «Создать новую ветвь системы управления версиями»?
Ответ
При создании нового проекта, в диалоговом окне «Указание параметров системы управления версиями» находятся следующие пункты: «Создать пустую папку системы управления версиями», «Создать новую ветвь системы управления версиями» или «Не создавать в этот момент папку системы управления версиями».
При выбранном пункте «Создать новую ветвь системы управления версиями» создается новая папка системы управления версиями для проекта, которая будет содержать все данные, содержащиеся в папке системы управления версиями другого существующего проекта. Т.е. выбирая этот пункт, говорится, что «проект X будет содержать все исходные коды проекта Y».
Таким образом, ответ на этот вопрос может звучать так: использование этой опции зависит от внутренней структуры и содержания существующего проекта. Если ветвь создается от существующего проекта, который содержит исходный код связанный только с единственным релизом, и новый проект будет использоваться для следующего релиза, который будет основан исключительно на предыдущей базовой версии кода, то можно использовать «Создать новую ветвь системы управления версиями».
Однако если существующий проект содержит несколько релизов (даже если они внутренние), то лучше использовать » Создать пустую папку системы управления версиями » для нового проекта, и затем выполнить ветвление от определенного каталога в существующем проекте, а не от корневой папки. Это позволит получить только необходимые каталоги, и даст более гибкое решение при формировании необходимой внутренней структуры нового проекта. Ниже диаграммы иллюстрируют подобную проблему:
Ветвление проекта

Ветвление каталога


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

Вопрос
Что такое метки и когда они должны использоваться?
Ответ
В системе управления версиями Team Foundation метка – это маркер, который может быть выборочно прикреплен к ряду никак несвязанных версий файла и папки на сервере управления версиями, чтобы облегчить их общий поиск в рабочем пространстве, как для разработки, так и процесса сборки. Типичный сценарий использования, метки могут представлять снимок исходного кода, который был успешно собран в определенный день (Team Build делает это автоматически для каждой сборки), или сохранение версии некоторых изменений, сделанных как базовый код.
В зависимости от разрешений, предоставленных определенным пользователям, метки могут быть изменены – файлы могут быть изменены, добавлены, удалены из метки. Метки довольно мощный инструмент и должны использоваться с осторожностью, при этом стоит помнить следующее:
Метки рекомендуются в случаях, когда необходим снимок исходного кода для будущей ссылки на него или использования в будущем. В сценариях, где можно гарантировать неизменность метки с использованием разрешений, можно использовать метки как маркеры для того, чтобы выполнить ветвление. Т.е. если нет необходимости для создания ветки сейчас, но ожидается потребность в ветвлении в будущем, то можно применить метку на исходный код и затем выполнить ветвление, когда это понадобиться.
Для любых других вариантов разработки, когда необходимо использовать снимок исходного кода на длительный промежуток времени, объединенного с потребностью в сохранении истории и ревизии изменений, и особенно когда несколько пользователей должны иметь доступ этой версии исходного кода и возможность изменять файлы и их содержание, то рекомендуется использовать ветвление. Ветки по определению позволяют файлам и папкам отклоняться от их начального состояния (также сохраняя начальные версии), включают историю и предоставляют большой выбор по управлению доступом на уровне файлов и папок.

Вопрос
Что такое метки и когда они должны использоваться?
Ответ
В системе управления версиями Team Foundation метка – это маркер, который может быть выборочно прикреплен к ряду никак несвязанных версий файла и папки на сервере управления версиями, чтобы облегчить их общий поиск в рабочем пространстве, как для разработки, так и процесса сборки. Типичный сценарий использования, метки могут представлять снимок исходного кода, который был успешно собран в определенный день (Team Build делает это автоматически для каждой сборки), или сохранение версии некоторых изменений, сделанных как базовый код.
В зависимости от разрешений, предоставленных определенным пользователям, метки могут быть изменены – файлы могут быть изменены, добавлены, удалены из метки. Метки довольно мощный инструмент и должны использоваться с осторожностью, при этом стоит помнить следующее:
Метки рекомендуются в случаях, когда необходим снимок исходного кода для будущей ссылки на него или использования в будущем. В сценариях, где можно гарантировать неизменность метки с использованием разрешений, можно использовать метки как маркеры для того, чтобы выполнить ветвление. Т.е. если нет необходимости для создания ветки сейчас, но ожидается потребность в ветвлении в будущем, то можно применить метку на исходный код и затем выполнить ветвление, когда это понадобиться.
Для любых других вариантов разработки, когда необходимо использовать снимок исходного кода на длительный промежуток времени, объединенного с потребностью в сохранении истории и ревизии изменений, и особенно когда несколько пользователей должны иметь доступ этой версии исходного кода и возможность изменять файлы и их содержание, то рекомендуется использовать ветвление. Ветки по определению позволяют файлам и папкам отклоняться от их начального состояния (также сохраняя начальные версии), включают историю и предоставляют большой выбор по управлению доступом на уровне файлов и папок.

Вопрос
Как управлять ошибками при ветвлении?
Ответ
Ветви исходного кода не оказывают влияния на рабочие элементы (например, ошибки). Это означает, что ошибки не клонируются в новый проект во время процесса ветвления. Поэтому обработка ошибок зависит от следующих вариантов:
Вариант 1: Ответственность и принадлежность для ошибок должны также переноситься в новый ответвленный проект разработки.
Ошибки могут быть скопированы в новый проект разработки. Поля нового созданного рабочего элемента предварительно заполняются значениями соответствующими полям исходного рабочего элемента. Ссылки рабочего элемента также будут скопированы. При этом существуют следующие ограничения:
Оригинальная ошибка должна быть закрыта и со ссылкой на скопированную ошибку.
Вариант 2: Ветвление выполняется только для исходного кода (в пределах того же проекта или в другой проект разработки). Ответственность и принадлежность для ошибок останутся в оригинальном проекте.
Исправление ошибки может быть осуществлено в оригинальном исходном коде или в исходном коде ответвления. При исправлении ошибки в исходном коде ответвления, ошибка должна быть обновлена как решенная в процессе слияния.
Вариант 3: Ответвление в другой проект будет выполнено только для исходного кода. Ответственность за тестирование исправления ошибки лежит на обоих проектах (например, если исправление ошибки должно быть повторно протестировано в новом потоке).
В этом случае, ошибки могут быть дублированы в новый командный проект копированием соответствующих ошибок. Обе команды разработки могут независимо отслеживать качество исправлений ошибок.
Дополнительные ресурсы
