Другие полезные команды

Притом, что эти команды используются не так часто как те которые рассматривались ранее в этой главе, иногда эти команды вам все-таки понадобятся.

svn cleanup

Когда 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

Команда 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) дерева файлов.