5 советов по использованию SVN

Apache Subversion (SVN) — централизованная система управления версиями, то есть для хранения всех файлов и совместной работы используется центральный сервер (или ПК). Так что без дополнительных ухищрений, без доступа к серверу разработка будет весьма проблематичной. SVN at work

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

Пользуйтесь внешними зависимостями

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

Для этого используется свойство svn:externals. Команда выглядит примерно так:

svn propset svn:externals test_proj

# Откроется текстовый редактор, в котором и нужно прописать пути

Есть и более удобный вариант. Нужно создать файл, к примеру svn.externals. Его нужно наполнить в виде:

ext-comp/sounds             http://sounds.someweb.com/test
ext-comp/skins/toolkit -r32 http://svn.someweb.com/repos/skin-maker 

# Таких компонентов может быть много, причем, с указанием ревизии

После этого нужно установить этот файл в качестве источника для внешних зависимостей:

svn propset svn:externals -F svn.externals .

# Свойство будет применено к текущей директории

Теперь осталось закомитить и апдейтнуть рабочие файлы.

Создание патчей

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

По сути это текстовый файл, который содержит все внесенные изменения. Чтобы его создать необходимо перейти в корень и выполнить:

svn diff > ^/fix.diff

# Файл будет сохранен в корневом каталоге

А для применения нужно выполнить:

svn patch fix.diff

# Патч будет применен для корневого каталога

Исключение файлов

Когда приходится работать с несколькими проектами одновременно, директории могут засориться ненужными файлами, которые могут понадобиться для выкатки, но не нужны в разработке. Чтобы не выкачивать лишние файлы и папки, в svn их можно просто исключить. То есть, они будут лежать на главном репозитории, но не будут добавляться к рабочим файлам во время выполнения checkout и update.

Чтобы исключить каталоги, нужно выполнить update с опциями --set-depth exclude:

$ svn update --set-depth exclude many-dirs/unwanted-dir
D         many-dirs/unwanted-dir

# Директории и файлы удаляются только на компьютере клиента

Отмена изменений

Так как в svn хранятся все данные об внесенных изменениях и полный лог разработки, то система позволяет исправлять ошибки и даже восстанавливать файлы. Вариантов несколько.

В случаях, когда в рабочую копию были внесены изменения, но что-то не работает и нужно вернуться к последней рабочей версии файла или целой директории, имеется команда svn revert:

$ svn revert test.c 
Reverted 'test.c'

# Возврат рабочей копии к последней копии на репозитории

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

$ svn merge -r 7:6 test.c 
--- Reverse-merging r7 into 'test.c':
U    test.c

# Возврат с ревизии 7 на ревизию 6

Еще можно быстро восстановить удаленные файлы и директории.

svn copy -m 'Undeleting test' https://svn.example.com/code/test@1263 https://svn.example.com/code/test

# Восстановление копии из версии 1263

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

Объединение диапазона ревизий

Кроме всего прочего, SVN умеет объединять не только две ревизии, а целые диапазоны. Реализована функция весьма просто:

svn merge -r 255:284 /trunk/test/ includes/test/

# Объединение директорий в includes/test/

Самое главное

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


Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень