Замораживание кода в SVN - Управление сборкой

Есть ли лучший способ реализовать замораживание кода в SVN, чем просить всех разработчиков не регистрировать новый код?
У нас запущен CruiseControl, который автоматически развертывает последнюю сборку в среде. Поэтому, если поступит новый код, сборка, которая была сделана доступной ранее, изменится на последнюю. Я хочу, чтобы развернутая сборка происходила из определенной ветви / тега, чтобы любые новые проверки кода не влияли на развернутую сборку. Только когда я добавлю тег / ветку в следующий раз, новый код должен быть снова развернут. Как мы можем достичь этого?

5 ответов

Используйте встроенные функции ветвления SVN. Следующая ссылка показывает все подробности о том, как выполнить переход (вы также можете использовать теги, если хотите): http://svnbook.red-bean.com/en/1.1/ch04.html

Соглашение Subversion о том, о чем вы говорите - это создание тега. Конечно, тег ничем не отличается от ветви в том смысле, что это просто копия определенной строки разработки с определенной ревизией (обычно... это сложные теги). Тем не менее, наилучшей практикой в ​​Subversion является то, что теги создаются один раз и НИКОГДА не фиксируются - это только снимки.

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

Если вы предпочитаете быть принудительным, вы можете отключить любые коммиты с помощью сценария ловушки pre-commit. У нас есть несколько припаркованных репо на работе, которые мы храним по историческим причинам, поэтому никаких новых коммитов не требуется. Вот как мы заморозили эти репо.


#!/bin/sh
exit 1

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

Конечно, есть и блокировка в механизме доступа - например, настройка файла authz.

Используйте стабильную ветку и Subversion >=1.5 (сервер, формат репозитория и клиенты).

Сделайте ветку из Trunk и обозначьте ее как вашу стабильную ветку. Запретите разработчикам вносить изменения в эту ветку, в идеале используйте файл authz с любыми доступными вам разрешениями.

Имейте политику, которая гарантирует, что любые изменения кода передаются в Trunk до того, как они могут быть развернуты, даже если эти изменения произошли в отдельной ветви.

Имейте круиз-контроль, наблюдайте, строите и разверните из назначенной устойчивой ветви вместо ствола.

Когда придет время для развертывания нового программного обеспечения, используйте функцию слияния Subversion, чтобы объединиться с веткой из транка. Всегда объединяйте таким образом, только из транка, и отслеживание слияния (только версия 1.5 и выше) гарантирует, что вы можете выбрать вишню и включить только те изменения, которые вы хотите из транка, исключая то, что вам не нужно. Это также позволит вам визуально проверить, какие именно версии текущего выпуска включены, а какие исключены.

После объединения и проверки результатов фиксация кода приведет к публикации Cruise Control, поэтому публикация происходит только в контролируемых точках.

Если вам необходимо выполнить откат к предыдущей версии, создайте тег из нужной версии стабильной ветви и временно укажите Круиз-контроль на нее вместо стабильной ветви, когда вы разобрались с проблемами в стабильной ветви, тогда вы можете развернуть из стабильной ветви снова, вместо тега.

Возможно, вы захотите заранее сделать теги до возникновения проблем, возможно, автоматически используя CruiseControl, чтобы теги уже были на месте, если вам нужно переключиться.

Не занимайтесь разработкой стабильной ветки, кроме устранения конфликтов слияния, или слиянием изменений из других мест, кроме транка - очень трудно будет точно сказать, что развернуто.

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