Использование svnsync для создания зеркала репозитория.
Ключевые слова: (найти похожие документы)
From: Zert <zerthurd@gmail.com.>
Newsgroups:
Date: Sun, 6 Oct 2006 17:02:14 +0000 (UTC)
Subject: Использование svnsync для создания зеркала репозитория.
Иногда бывает нужно создать зеркало репозитория, например, с целью бэкапа. Subversion
версии 1.4 содержит замечательную утилиту svnsync. Разберёмся, как с помощью неё
создать зеркало.
Для начала, создаём пустой, новенький репозиторий:
[zert@zert]:~ $>> svnadmin create /tmp/svn-backup
После этого попытаемся его проинициализировать для использования в качестве зеркала
репозитория на svn://localhost/ (схема и URL могут быть другими).
Для начала, читаем хелп:
[zert@zert]:~ $>> svnsync help
Затем выполняем примерно такую команду:
[zert@zert]:~ $>> svnsync init file:///tmp/svn-backup svn://localhost/
svnsync: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
И у нас ничего пока не выходит. Ошибка... Необходимо её исправить, добавив хук на эту
транзакцию (revision propchanges) в чистом репозитории:
[zert@zert]:~ $>> cd /tmp/svn-backup/hooks
Здесь уже есть шаблоны для некоторых типов транзакций. Переименовываем шаблон и
делаем его исполняемым, затем редактируем:
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
Здесь могут находиться любые команды, которые мы желаем выполнять перед сменой
свойств вхождений репозитория. Пока закомментируем выход с ошибкой, и ничего
добавлять не будем:
# if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
# echo "Changing revision properties other than svn:log is prohibited" >&2
# exit 1
Теперь можно повторить попытку инициализации:
[zert@zert]:hooks $>> cd
[zert@zert]:~ $>> svnsync init file:///tmp/svn-backup svn://localhost/
Copied properties for revision 0.
Инициализация прошла успешно! Теперь репозиторий file:///tmp/svn-backup
проинициализирован на отражение svn://localhost/. Выполняем его с оригиналом:
Всё замечательно. Теперь, если мы сделаем checkout с file:///tmp/svn-backup, то
получим то же, что и при checkout с оригинала.
Но не будем останавливаться на этом. Нам необходимо, чтобы информация назеркале
отражалась сразу, после внесения изменений в оригинал. Добавим хук, который будет
выполняться после коммита на оригинальном репозитории:
[zert@zert]:~ $>> cd /var/svn/hooks/
где /var/svn - директория, содержащая репозиторий на localhost, считающаяся svnserve
корневой.