The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Использование svnsync для создания зеркала репозитория.


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова:  (найти похожие документы)
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" [email protected] log-commit.py --repository "$REPOS" --revision "$REV" Комментируем или удаляем строки, содержащие не нужные нам в данный момент команды, и добавляем свою: svnsync sync file:///tmp/svn-backup Теперь, как только мы скажем: svn commit в рабочей директории проекта, изменения тут же окажутся и на зеркале.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1.1, scorp21 (??), 13:57, 09/10/2006 [ответить]  
  • +/
    эээ, а если зеркало окажется в какой-то момент недоступным? как потом пойдут одновления, с пробущенной ревизией-то?
    и почему то мне кажется, что вытягивать на зеркала обновления по крону правильнее будет. где захотел там и поднял и не обязательно основной репозиторий учить этому
     
  • 1.2, Zert (?), 15:14, 09/10/2006 [ответить]  
  • +/
    A tam ne obyazatel'no posle kazhdogo kommita sync delat'. Mozhno po kronu zapuskat', raz v sutki, ili kak ugodno. svnsync tol'ko sinhroniziruet, bez raznicy, proishodili izmeneniya ili net, posle nego 2 repozitoriya budut imet' odinakovye versii. E'to tol'ko odin iz patternov primeneniya svnsync, i primer, kak mozhno vypolnyat' dejstvie vo vremya kommita.
    Osnovnoj repozitorij nichemu i ne uchitsya, e'to udalyonnyj uchitsya byt' zerkalom osnovnogo.
     
  • 1.4, Oxyum (?), 16:02, 12/10/2006 [ответить]  
  • +/
    А хук на коммит в основной никто не добавлял?.. ;)
     
  • 1.5, imp (??), 19:16, 20/11/2007 [ответить]  
  • +/
    если есть сервер №1 на синхронизацию с которым настроен сервер №2... и у сервера №1 настроен post-commit скрипт который запускает эту синхронизацию, то при выполнении синхронизации у сервера №2 тоже будет срабатывать post-commit скрипт... причём если на сервере №2 сделать checkout  в какую-то папку из свн'на на сервере №2, и добавить в post-commit сервера №2 svn update этой рабочий копии, то будем получать на "удалённом сервере" снимок рабочей копии с главного репозитория...
    если добавить на сервере №2 в post-commit скрипт какой-то commit в эту рабочую копию - получим рекурсию :)
     
  • 1.6, kris (?), 13:23, 10/03/2008 [ответить]  
  • +/
    Что то я запутался как основной сервер на post-commit сделает svnsync с file:///tmp/svn который на другом сервере?
     
  • 1.7, Nas_tradamus (ok), 17:54, 27/11/2009 [ответить]  
  • +/
    Статья очень полезная, но не понятно где какой сервер.
     
  • 1.8, Nas_tradamus (ok), 18:34, 27/11/2009 [ответить]  
  • +/
    Почитал вот это:
    http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt

    И понял что автор в своей статье показал как сделать репликацию на ту же машину, где крутится мастер. :D

     
  • 1.9, plgrm44 (?), 21:17, 16/01/2011 [ответить]  
  • +/
    зеркало должно быть только на чтение
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру