Стратегии ветвления и слияния

Мне было поручено разработать стратегию ветвления, слияния и выпуска в течение следующих 6 месяцев.

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

В настоящее время мы используем VSS для управления кодом, но знаем, что это, вероятно, вызовет некоторые проблемы и будет мигрировать в TFS до начала новой разработки.

Какие стратегии я должен использовать и какие вещи я должен рассмотреть, прежде чем планировать план?

Извините, если это расплывчато, не стесняйтесь задавать вопросы, и я буду обновлять с дополнительной информацией, если потребуется.

Ответы на вопрос(4)

Книга подрывной деятельности описываетнекоторые общие шаблоны ветвления, Может быть, вы также можете применить их к TFS.

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

Хобот ваш главный источник. Это содержитпоследний и самый большой код и с нетерпением жду. Это вообще нет всегда стабильный.

Релиз это связь один-ко-многим с транком. Существует один ствол, но много выпусков, которые происходят из ствола. Релизы обычно начинаются с ветки ствола, как только достигнут определенный этап функциональности, поэтомутолько" то, что осталось сделать для конкретного развертывания, должно быть просто исправлением ошибок. Затем вы разветвляете соединительную линию, присваиваете ей метку (например, 1.6 Release является нашей текущей последней версией), собираете и отправляете релиз в QA. На этом этапе мы также увеличиваем номер версии (обычно младший номер) соединительной линии, чтобыу меня два выпуска с одинаковым номером.

Затем вы начинаете цикл тестирования в своей ветке релизов. Когда будет выполнено достаточное тестирование, вы применяете исправления ошибок к ветке релиза, объединяете их обратно в ствол (чтобы обеспечить исправление ошибок!), А затем повторно выпускаете сборку ветки. Этот цикл с QA продолжается до тех пор, пока вы оба не будете довольны, и выпуск, наконец, будет передан покупателям. Любые сообщения об ошибках от клиентов, которые являются точными (то есть они являются ошибкой!), Начинают новый цикл QA с рассматриваемой ветвью.

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

Используя эту технику, вы можете развертывать решения с использованием вашей технологии для различных клиентов, которым требуется разный уровень обслуживания (начиная с наименьшего первого), и вы можете изолировать свои существующие развертывания от "опасно» новый код в транке и худший сценарий слияния - одна ветвь.

Моя первая рекомендация - прочитать книгу Эрика Синка.Контроль источника HOWTO - конкретноветви а такжеслияние ветвей главы.

У нас есть 3 контейнера - DEV, MAIN и RELEASE для нашей работы. ГЛАВНАЯ содержит все нашиготовые к выпуску» код, и мы склонны думать об этом какв основном стабильный. " DEV / Iteration (или DEV / Feature, или DEV / RiskyFeatureThatMightBreakSomeoneElse) являются ветвями из MAIN и объединяются, когда итерация / функция готова продвигаться дальше среды DEV. У нас также есть сборки TFS, настроенные из ветки DEV / Iteration и MAIN.

Наш контейнер RELEASE содержит пронумерованные выпуски (аналогичнотеги» контейнер, используемый во многих хранилищах Subversion). Мы просто берем ветку от MAIN каждый раз - мне нравится говорить, что мыре "резка» ветвь RELEASE для обозначения этогопосле слияния не будет много активности.

Что касается VSS->TFS - Microsoft поддерживаетпуть обновления которыйдолжен сохранить историю версий, но если вы немне не нужна история, я бы просто взял последнюю версию из VSS, проверил ее в TFS и заархивировал репозиторий VSS.

Последний совет - ознакомьте членов вашей команды с системой контроля версий.Они должны понимать ветвление и слияние или вы застрянете, делая большую работу по уборке :).

Удачи!

Решение Вопроса

Это единственный лучшийшаблон управления источником что я сталкивался. Это подчеркивает важность того, чтобы багажник был свободен от мусора (в багажнике нет мусора). Разработка должна выполняться в ветвях разработки, и регулярные слияния (после того, как код был протестирован) должны быть возвращены в ствол (Рис. 1), но модель также позволяет исправлять исходный код, пока он находится в стадии разработки (Рис. 2). Я определенно рекомендую прочитать пост полностью, чтобы полностью понять.

     Pic 1

     Pic 2

Редактировать: Фотографии определенно путают без слов. Я мог бы объяснить, но я в основном буду копировать оригинального автора. Сказав это, я, вероятно, должен был выбрать лучшую картину для описания процесса слияния, так что, надеюсь, это поможет. Я'Тем не менее, я рекомендую прочесть пост:

 Nicolas Webb12 нояб. 2009 г., 20:28
Я полностью принимаю "нет хлама в багажнике для описания нашей основной ветке. Awesome.I»
 Murph13 нояб. 2009 г., 11:02
@Quibblesome - шаблон говорит, что он должен быть готов к выпуску до его объединения в магистраль, и настоятельно рекомендует, чтобы после объединения ветвь и магистраль были идентичны ..
 Quibblesome12 нояб. 2009 г., 20:36
Я прочитаю об этом, но я неСнимите только изображение, особенно если вы скажете: «нет хлама в багажнике, Кто тестирует багажник? Насколько я могу судить, этот шаблон предполагает обратное, поскольку никто в основном не использует транк для dev или test ....

Ваш ответ на вопрос