|
Ключевые слова: (найти похожие документы)
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 Здесь уже есть шаблоны для некоторых типов транзакций. Переименовываем шаблон и делаем его исполняемым, затем редактируем: [zert@zert]:hooks $>> mv pre-revprop-change.tmpl pre-revprop-change [zert@zert]:hooks $>> chmod +x pre-revprop-change [zert@zert]:hooks $>> vim pre-revprop-change После множества комментариев, в самом конце файла видим примерно такие строчки (могут отличаться, в зависимости от версии svn): REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" 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/. Выполняем его с оригиналом: [zert@zert]:~ $>> svnsync sync file:///tmp/svn-backup Committed revision 1. Copied properties for revision 1. Committed revision 2. Copied properties for revision 2. ... Всё замечательно. Теперь, если мы сделаем checkout с file:///tmp/svn-backup, то получим то же, что и при checkout с оригинала. Но не будем останавливаться на этом. Нам необходимо, чтобы информация назеркале отражалась сразу, после внесения изменений в оригинал. Добавим хук, который будет выполняться после коммита на оригинальном репозитории: [zert@zert]:~ $>> cd /var/svn/hooks/ где /var/svn - директория, содержащая репозиторий на localhost, считающаяся svnserve корневой. [zert@zert]:hooks $>> mv post-commit.tmpl post-commit [zert@zert]:hooks $>> chmod +x post-commit [zert@zert]:hooks #>> vim post-commit Видим примеры использования хука: REPOS="$1" REV="$2" commit-email.pl "$REPOS" "$REV" commit-watchers@example.org log-commit.py --repository "$REPOS" --revision "$REV" Комментируем или удаляем строки, содержащие не нужные нам в данный момент команды, и добавляем свою: svnsync sync file:///tmp/svn-backup Теперь, как только мы скажем: svn commit в рабочей директории проекта, изменения тут же окажутся и на зеркале.
|
Обсуждение | [ RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |