Как использовать ствол, ветви, теги в 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.