Как использовать ствол, ветви, теги в SVN от затмения?

Вот что я хочу знать.

Мы разработаем программное обеспечение и выпустим основную версию v1.0.

После перемещения этой версии в производственную среду, если мы обнаружим какие-либо ошибки, мы исправим их и предоставим исправление версии p1.0.1, которое будет применено к существующей основной версии v1.0, которая состоит только из измененных классов для исправления ошибки. И это продолжается, как всякий раз, когда обнаруживается какая-либо ошибка или требуется усовершенствование, мы выпускаем новую версию патча, которая будет применяться поверх существующей основной версии и существующих патчей.

Итак, как мы можем поддерживать только измененные исходные (java) файлы для конкретного выпуска патча? Как будто нам нужно иметь полный исходный код и отдельно мы должны поддерживать исходный код патча. Мы должны синхронизировать этот код в SVN, так как множество людей занимаются исправлением ошибок и исправлениями.

Магистраль, филиалы, теги будут ли они полностью удовлетворять наши потребности?

Пожалуйста, предложите.

1 ответ

Решение

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

В нестабильном транке вы делаете все свои разработки на транке. Все работают вместе. У нас более 100 разработчиков, и у нас нет проблем с этим. Это заставляет разработчиков работать вместе, вносить небольшие изменения и постоянно совершать эти изменения.

Он также хорошо работает с конструктором непрерывной интеграции, таким как Jenkins.

Когда вы достигаете какой-то волшебной точки, вы создаете ветку релиза. Что это за волшебная точка? Это зависит. Идея состоит в том, что когда вы приблизитесь к выпуску, у вас будет несколько разработчиков, работающих над следующим выпуском, и некоторые разработчики, работающие над функциями, которые войдут в самый следующий выпуск. Две группы, работающие параллельно, означают разветвление.

В некоторых группах это происходит, когда вы подходите к кандидату на релиз, или когда вы полностью готовы к выпуску, а теперь вы просто исправляете ошибки. В этот момент вы создаете ветку для своего релиза. Наш стандарт - звонить в эту ветку после вашего выпуска.

Пример: создание релиза

У вас есть команда из 10 разработчиков. Вы работаете над выпуском 1.2. Все работы в данный момент ведутся на багажнике. Теперь, когда выпуск почти завершен, вы назначаете двух из этих разработчиков для работы с QA и UAT для исправления кода и работы над выпуском. Все остальные разработчики продолжают свою работу.

Вы создаете ветку под названием 1.2 с помощью svn cp копировать trunk в branches/1.2, Теперь эти два разработчика, работающие с QA и UAT, работают над Branch 1.2, а остальные продолжают работать с транком.

Когда вы будете готовы выпустить код, вы можете использовать svn cp копировать branches/1.2 в tags/1.2,

Теперь у вас есть некоторые ошибки, которые были исправлены в вашей версии 1.2, которые могут относиться к той версии 1.3, над которой вы работаете trunk, В этом случае вы можете использовать svn merge -c $REV где $REV это ревизия в Subversion, в которой вы исправили соответствующую ошибку. Обратите внимание, что нет реинтеграции. Вы просто применяете патчи в branches/1.2 в trunk,

Пример: патч-релиз

Вы выпустили Выпуск 1.2, и была обнаружена критическая ошибка. Клиенты не могут дождаться Выпуска 1.3, поэтому вы исправите ошибку сейчас и создадите Выпуск 1.2.1.

В этом случае, так как у вас уже есть branches/1.2, вы просто исправляете эту ветку, а затем, когда вы готовы сделать релиз, вы копируете 1.2 филиал в tags/1.2.1,

Еще раз, вы объединяете отдельные изменения из branches/1.2 через магистраль svn merge -c $REV,

ПРИМЕЧАНИЕ. Нет необходимости создавать ветку 1.2.1. Однако ничто не мешает вам сделать это, если вы того пожелаете. Вы могли бы иметь копии tags/1.2 в branches/1.2.1 и делай свою работу там. Затем вы можете скопировать branches/1.2.1 в tags/1.2.1 когда вы делаете релиз.

Единственная возможная проблема заключается в том, что ваше ветвление trunk -> branches/1.2 -> tags/1.2 -> branches/1.2.1, сращивание /branches/1.2.1 Вернуться в trunk использовать, чтобы вызвать проблемы в старых версиях Subversion. Это не должно быть проблемой в Subversion 1.6 или выше.

Еще один совет: не используйте повторно названия релизов или теги. Можно говорить о выпуске 1.2, но каждый патч должен быть помечен 1.2.1, 1.2.2, 1.2.3 и т. Д. Или, 1.2p1, 1.2p2. Дело в том, что вы должны иметь возможность указывать на каждый релиз, который вы поставили в производство. Если вы хотите узнать, что изменилось в патче №3, вы можете сделать различие между 1.2.2 и 1.2.3.

Другие вопросы по тегам