Притом, что эти команды используются не так часто как те которые рассматривались ранее в этой главе, иногда эти команды вам все-таки понадобятся.
Когда 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, использующими модель конкурентного управления версиями «lock-modify-unlock»; за более подробным определением обратитесь к Three meanings of «lock»
Команда svn import это быстрый способ скопировать не версионированное дерево файлов в хранилище, Создавая при необходимости промежуточные директории.
$ 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) дерева файлов.