Правильное использование СВН ветвей и ствола

У меня вопрос, как правильно использовать ствол и ветки для моих проектов SVN. Для проекта моей команды мы создаем 3 основных релиза каждый год, а иногда и второстепенные релизы между ними. В любой момент у нас может быть активная разработка двух или даже трех релизов. Мы занимались всей разработкой в ​​ветках со структурой вроде:

/branches/project1/2009.01
/branches/project1/2009.06
/branches/project1/2009.09
/branches/project1/2009.10

На сегодняшний день, когда я готов создать ветку для следующего выпуска, я объединяю изменения из текущей ветки в магистраль, а затем создаю новую ветку из магистрали. Затем я вручную обновляю последние ветки разработки с исправлениями ошибок в ветках предыдущих выпусков путем слияний через магистраль. Никакая разработка или коммиты никогда не выполняются в стволе (кроме фиксации для слияний). Теперь мне интересно, зачем мне вообще багажник. Что было бы неправильным в том, чтобы просто создать следующую ветвь выпуска непосредственно из ветки предыдущего выпуска и также слить обновления исправлений ошибок непосредственно из одной ветки в другую. Могу я просто удалить проект под стволом?

Все документы по передовой практике SVN, похоже, указывают на использование магистрали для разработки, но использование отдельных веток для каждого выпуска кажется мне намного проще, поскольку мы можем работать над 2 или 3 выпусками одновременно. Есть ли какие-либо технические проблемы с использованием моего SVN? Предложения?

Спасибо!


person KLL    schedule 02.12.2009    source источник


Ответы (3)


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

person the_mandrill    schedule 02.12.2009

Я согласен с the_mandriill - нет ничего плохого в том, что вы делаете, но также нет ничего плохого (по крайней мере, IMO) в том, чтобы всегда спрашивать, могли бы вы сделать лучше.

Есть отличная статья cmcrossroads, которая даст вам более чем достаточно идей о различных способах управления вашим кодом.

K

person Kevin Shea    schedule 03.12.2009

То, как вы работаете, в порядке. На данный момент все проходит через ствол, так что у вас есть единая точка отсчета, чтобы знать, где все находится. Проблема с неиспользованием транка заключается в том, что вы точно знаете, где произошла ошибка. Со стволом вопрос линейный. Без ствола он становится экспоненциальным, так как вам нужно сравнивать каждую ветвь с каждой другой веткой, чтобы увидеть, что в них находится.

Лично я бы предпочел не видеть, чтобы какой-либо код происходил из веток выпуска - сначала внесите исправления в ветки разработки, а затем слейте через магистраль в ветку выпуска. Иногда это непрактично, но с историей слияния всегда можно повозиться, чтобы все выглядело так, как будто именно это и произошло. В общем, сплошной поток кода из веток разработки, через транк и в релизы вполне объясним.

Причина этого в том, что вы можете назначить номер редакции магистрали каждому исправлению и отслеживать эту ревизию, просто сравнивая историю слияния каждой версии с магистралью. Вы даже можете свести это в таблицу, чтобы увидеть, какие именно исправления были выпущены. (Например, см. Мой ответ здесь).

Если исправление может происходить в ветке выпуска, такое сравнение становится намного сложнее. Хотя я полагаю, что все еще возможно. Но если транка нет, вам нужно сравнивать каждый выпуск друг с другом, и это становится намного сложнее.

person Jim T    schedule 03.12.2009