26 нояб. 2012 г.

SVN : branches and tags

Небольшая напоминалка по поводу использвоания таких фич SVN как branches и tags. Функция бранчей и тагов уже достаточно описана. В двух словах — это параллельный набор исходников (ну, или того, что хранится в SVN). С помощью branch обеспечивается безопасное внесение изменений без затрагивания основной (trunk) копии сорцов. После окончания внесения изменений, проверки и тестирования версии продукта в бранче производится его перенос в основную ветку - транк. Это может быть совмещение (merge), может быть замена транка бранчем... Зависит от политики и настроения. Назначение tag аналогично за исключением того, что после создания копии транка в тэге эта копия не предполагает изменения. Тэги еще называют метками (labels). Их делают для того, чтобы в репозитории хранился моментальный снимок сорцов на какой-то определенный момент времени. Например, для каждого релиза создается тэг, к которому можно откатиться в случае необходимости. В случае SVN и trunk, и branch, и tags - обычные директории, выполняющие свои специфические функции на уровне соглашения. Предполагается, что содержимое директории %PROJECT_REPO%/tags не изменяется - только создается новая поддиректория для каждого из тэгов. Директория %PROJECT_REPO%/branches используется для хранения бранчей. Но при этом ничто, кроме здравого смысла, не мешает пользователю назвать эти директории по-своему или вносить изменения в тэги. Как бы то ни было, напоминалка! Создание бранча/тэга в предположении, что проект лежит в ~/work/project/:
mkdir -p ~/work/project/tags/rc1
svn add ~/work/project/tags/rc1
svn ci -m "rc1 tag added" ~/work/project/tags/rc1

svn copy -m "Some comment" https://svn.server:port/svn/currentProject/trunk/ https://svn.server:port/svn/currentProject/tags/rc1/

svn up
Для создания бранча последовательность аналогична:
mkdir -p ~/work/project/branches/camelStyleInvolving
svn add ~/work/project/branches/camelStyleInvolving
svn ci -m "rc1 tag added" ~/work/project/branches/camelStyleInvolving

svn copy -m "Some comment" https://svn.server:port/svn/currentProject/trunk/ https://svn.server:port/svn/currentProject/branches/camelStyleInvolving/

svn up
Для переключения локальной копии репозитория в нужный бранч/тэг нужно выполнить следующую команду в директории, соответствующей основной ветке (в данном случае это ~/work/project/):
cd ~/work/project/trunk
svn switch https://svn.server:port/svn/currentProject/branches/camelStyleInvolving/ ./
указание текущей директории "./" можно опустить, но лучше ее указывать явно, чтобы избежать неприятных промахов. При этом в локальную копию транка помещаются файлы из бранча. То есть, для среды разработки пути и расположение файлов не изменяется. Меняется только их содержимое. Ну, и чтобы вспомнить в какой ветке сейчас находится локальная версия репозитория, можно использовать команду svn info:
svn info
Эти действия предполагают работу в консоли bash. Подобные действия можно производить и в консоли Windows-окружения. Для графического интерфейса действия зависят от используемого SVN-клиента.

Комментариев нет:

Отправить комментарий