Хотя эти команды используются не так часто, как рассмотренные ранее в этой главе, иногда они вам все-таки пригодятся.
Когда Subversion изменяет рабочую копию (или любую информацию
в области .svn
), она пытается делать это
как можно более осторожно. Перед изменением рабочей
копии Subversion записывает свои намерения в лог-файл. Затем
для выполнения запрошенных изменений она выполняет команды из
лог-файла, устанавливая блокировку той части рабочей копии, с которой
работает — это делается для предотвращения работы других
Subversion-клиентов с той рабочей копией, которая находится в
промежуточном состоянии. После выполнения запрошеных действий
Subversion удаляет лог файл. Архитектурно это
напоминает журналируемую файловую систему. Если работа Subversion
была прервана (в результате того, что процесс был убит или, например,
из-за машинного сбоя), лог файлы остаются на диске. Перезапустив
выполнение лог файлов, Subversion может завершить предварительно
начатые операции, и рабочая копия снова вернется в согласованное
состояние.
Именно это, собственно, и делает svn cleanup:
она ищет в рабочей копии и выполняет незавершенные лог-файлы,
удаляя по ходу выполнения блокировки в рабочей копии. Если Subversion
когда-нибудь говорила вам о том, что часть рабочей копии
«заблокирована», то вам нужно запустить эту команду.
Кроме того, svn status покажет для заблокированных
элементов букву L
:
$ svn status L somedir M somedir/foo.c $ svn cleanup $ svn status M somedir/foo.c
Не путайте эти блокировки рабочей копии с обычными блокировками, которые устанавливают пользователи Subversion, использующие модель конкурентного управления версиями «блокировка-изменение-разблокировка»; за более подробным определением обратитесь к Three meanings of «lock»
Команда svn import — это быстрый способ скопировать неверсионированное дерево файлов в хранилище, cоздавая при необходимости подкаталоги.
$ svnadmin create /usr/local/svn/newrepos $ svn import mytree file:///usr/local/svn/newrepos/some/project \ -m "Initial import" Adding mytree/foo.c Adding mytree/bar.c Adding mytree/subdir Adding mytree/subdir/quux.h Committed revision 1.
В предыдущем примере выполняется копирование содержимого
каталога mytree
в каталог
some/project
хранилища:
$ svn list file:///usr/local/svn/newrepos/some/project bar.c foo.c subdir/
Обратите внимание на то, что после завершения импорта оригинальное дерево файлов не конвертируется в рабочую копию. Чтобы начать работать, вам необходимо создать новую рабочую копию (svn checkout) дерева файлов.