Если мы будем работать только с одной веткой в Subversion, стоит ли вообще беспокоиться? Разве мы не можем просто работать над стволом, чтобы ускорить процесс?
Вот как мы развиваемся с Subversion:
- Есть сундук
- Мы делаем новую ветку разработки
- Мы разрабатываем новую функцию в этой отрасли
- Когда функция завершена, она объединяется в ствол, ветка удаляется, и из ствола создается новая ветвь разработки.
Когда мы хотим выпустить в производство, мы делаем тег из ствола. Исправления сделаны на ветке из этого тега. Это исправление затем сливается в ствол.
Вот почему мы делаем новую ветвь разработки после того, как функция будет завершена. Таким образом, исправление будет достаточно быстро включено в наш новый код.
Ниже приведена схема, которая должна уточнить:
Теперь есть ощущение, что это не самый эффективный способ работы. Мы строим локально, прежде чем совершить коммит, что занимает около 5-10 минут. Вы можете понять, что это довольно длительное время ожидания.
Идея ветки разработки заключается в том, что транк всегда готов к выпуску. Но это не так в нашей ситуации больше. Иногда функция почти готова, и некоторые разработчики уже начнут кодировать следующую функцию (в противном случае они будут сидеть сложа руки в ожидании завершения одного или двух разработчиков и объединения).
Затем, когда функция 1 завершена, она объединяется в транк, но с некоторыми фиксациями функции 2.
Итак, должны ли мы вообще заниматься веткой разработки, поскольку у нас только одна ветка? Я читал о разработке на основе соединительных линий и ветвлении за абстракцией, но большинство статей, которые я нашел, сфокусировано на части ветвления за абстракцией. У меня сложилось впечатление, что для больших изменений, которые будут охватывать несколько выпусков. Это не проблема, которую мы имеем.
Что вы думаете? Можем ли мы просто работать на стволе? В худшем случае (я думаю) нам нужно сделать тег из ствола и выбрать нужные нам коммиты, потому что некоторые коммиты / функции еще не готовы к производству.
Ответы:
ИМХО работать напрямую с транком - это хорошо, если вы можете фиксировать с небольшими приращениями и у вас есть постоянная интеграция, чтобы вы могли (в разумной степени) гарантировать, что ваши коммиты не нарушат существующую функциональность. Мы делаем это и в нашем текущем проекте (на самом деле я не работал ни в одном проекте, использующем ветви задач по умолчанию).
Мы создаем ветку только перед выпуском, или если функция занимает много времени для реализации (т.е. охватывает несколько итераций / выпусков). Примерный размер задачи почти всегда можно оценить достаточно хорошо, чтобы мы заранее знали, нужна ли нам для нее отдельная ветвь. Мы также знаем, сколько времени осталось до следующего выпуска (мы публикуем выпуски примерно каждые 2 месяца), поэтому легко понять, подходит ли задание времени, доступному до следующего выпуска. Если вы сомневаетесь, мы откладываем это до тех пор, пока не будет создана ветвь релиза, тогда можно начинать работать над этим в транке. До сих пор нам нужно было создавать ветку для конкретной задачи только один раз (примерно через 3 года). Конечно, ваш проект может отличаться.
источник
Что вы описываете при разработке функций, так это параллельная разработка (одновременная разработка, ориентированная на разные выпуски продукта), и для ее правильной работы требуются ветви. У вас может быть одна ветка либо для каждого выпуска, либо для каждой функции, если вам часто приходится перекомпоновывать функции, которые будут выпускать конкретный выпуск.
Другой способ сделать это - по умолчанию работать вне транка, но создать ветку, если вы ожидаете, что ваша задача будет расширена до следующего выпуска. Вы всегда помечаете выпуск, конечно.
Какой подход вы выберете, в действительности зависит от того, насколько вы можете управлять заранее. Если типичный выпуск не имеет параллельной разработки, я бы выбрал второй подход.
источник