среда, 16 декабря 2009 г.

Subversion: Начало

Благодаря интуитивно понятному интерфейсу всяких программ и эклипсоплагинов создается впечатление, что знаешь как работать с свн. Но когда дело доходит до суровых консольных условий приходится читать svn book и с плачем гуглить.

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

Дело в том, что свн создает рабочую копию только чекаутом, то есть одиночной операции, позволяющей сразу поместить папку под контроль версий, не имеется. Делается двумя способами.

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

svnadmin create /var/svn-repos/content
cd /home/mycontent

Способ 1, не пугающий.

1. svn checkout file:///var/svn-repos/content .
2. svn add ./*
3. svn commit

Да-да, в первом шаге в конце отделенная пробелом точка (если ее не поставить то внутри /home/mycontent получим заверсионеную подпапку content).
Не пугающий, потому что здесь сам процесс помещения контента идет так, как и подсказывает разум. Однако, такой способ доступен только если после шага 0 вы не успели сделать роковой свн импорт (и ваш репозиторий пуст). Если сделали - выбираем способ для смелых.

Способ 2, для смелых.
На самом деле это полностью рабочий и безопасный способ (я его и использовал так как см выше).

1. svn import -m "Initial import" \
file:///var/svn-repos/content
2. svn checkout --force \
file:///var/svn-repos/content .

Способ этот для смелых, потому что создается впечатление, что свн перезаписывает все файлы (без параметра --force свн вежливо указывает на наличие файлов с таким же именем как и в репозитории). Однако по авторитетному заявлению в svn help checkout:
If the obstructing path is the same type (file or directory) as the corresponding path in the repository it becomes versioned but its contents are left 'as-is' in the working copy.

Вот так-то.

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

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