Вариант А. Просто использование основной линии и тегов для выпуска
Плюсы:
-
Вы избегаете слияния ада.
-
Соблюдение основных правил поощряет некоторые передовые практики, такие как правильное планирование релизов, отсутствие большого количества WIP, использование разветвления по абстракции для работы с внеполосной долгосрочной работой, а также использование открытой закрытой системы и настраиваемых функций для управления работами. в процессе, который может; или не может; необходимо отключить сейчас или в будущем, чтобы выпустить или избежать полного отката.
Минусы:
-
Работа с незавершенными работами становится проблемой и увеличивает потенциальную поверхность атаки, когда наступает время ее выпуска. Однако, если ваши разработчики дисциплинированы, новые функции должны быть настраиваемыми и модульными и, следовательно, легко отключаться / включаться, или WIP отсутствует, и в каждой точке выпуска вся работа либо завершена, либо еще не была начата (например, Scrum).
- Крупномасштабные / внеполосные изменения требуют более обдуманного заблаговременного внедрения (например, ветвление по абстракции).
Лично я предпочитаю такой подход. Покрытие кода и модульные тесты должны идентифицировать код, который не готов выйти на улицу, и люди не должны работать над кодом, который не будет выпущен во время текущей итерации. Ветвление по абстракции или другим механизмам может быть использовано для решения долгосрочных изменений и работ в процессе.
Когда вы этого не делаете, вы начинаете сталкиваться с проблемами слияния, устаревшим кодом, функциями, которые никогда не выпускаются, и т. Д.
Вариант Б. Ветвление по выпуску
Плюсы:
- Вы можете начать работу над следующей итерацией, пока текущая итерация завершает раунд приемочных испытаний.
- Другие вещи, я уверен.
Минусы:
-
- Тонны веток.
- Еще нужно пометить ветки в точках выпуска.
- Еще нужно разобраться с WIP и объединить WIP из предыдущей ветки релиза в следующую ветку релиза, если он не собирается это делать, и все равно нужно отключить или восстановить его из ветки релиза и повторно запустить приемочные тесты
- Горячие исправления должны быть применены к большему количеству веток (ветвь релиза + исправление + новый тег + исправление слияния с веткой vnext и, возможно, vnextnext в зависимости от того, куда упало исправление.)
Я не большой поклонник этого решения ^ _ ^.
Как правило, я бы рекомендовал просто придерживаться основной линии. Если у ваших разработчиков возникают проблемы с не написанием WIP, который можно легко восстановить, если он не прошел обрезку или проверен заранее для следующего выпуска, тогда вы можете начать говорить о маркировке кода в точке, где он должен быть завершен, и о ветвлении. оттуда, если необходимо, чтобы устранить упущенные дефекты и ошибки, которые не удалось выявить юнит-тестам ваших разработчиков.
В идеале, хотя я думаю, что вы хотите, чтобы это был процесс исключения, а не правило.
Вариант C. Безумный Бонус Вариант
Если вы хотите получить фантазию, вы также можете рассмотреть модель ветвления для каждой пользовательской истории / функции. ( Ужасная идея в TFS или любой другой, не DVCS, и в то же время невероятно тривиальная реализация при использовании DVCS, как git или mercurial ).
В прошлом я реализовывал следующее для предыдущей группы поддержки работодателей, которая работала с устаревшей кодовой базой, которую нелегко перенести на mercurial из svn. Было проделано много ненужной работы, чтобы удовлетворить бизнес-требования всегда выпускаемой основной линии, а не просто лучше координировать релизы. , ,
- Особенности были разработаны разработчиками в их командах разработчиков.
- Когда функция готова к рассмотрению коллегами, разработчики объединяют ее в одно объединение из ветви Dev в ветку CR и включают в заголовок идентификатор функции / историю пользователя. * Усиливается с помощью pre-commit hook *
- После прохождения CR используется инструмент администратора для продвижения функции в ветку QA. (Я написал небольшое терминальное приложение, в котором перечислены пользовательские истории, присутствующие на различных этапах приемки, и позволил оператору продвигать или понижать его между этими этапами приемки).
- QA проводит тесты автоматизации и ручного юзабилити. Если функция хороша, ее помещают в ветку релиза (mainline). Если функция отклонена, ее понижают / возвращают из ветви QA, пока разработчики не смогут решить проблемы, поднятые во время тестирования, и добавить отправку патча в ветку CR.
- Если код был возвращен из ветви QA и применено исправление, инструмент терминала повторно применяет необходимые изменения, чтобы перенести функцию обратно в ветку QA из ветви CR, чтобы QA мог пересмотреть код и либо продвинуть его, либо понизить это снова.
- В любой момент времени ветвь релиза должна находиться в стабильном состоянии.
- После выпуска новые Dev, QA и CR выводятся из основной линии.