Как сделать резервную копию удаленного репозитория SVN - PullRequest
47 голосов
/ 20 февраля 2010

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

Удаленный сервер - сервер Windows 2003. Домашний сервер - Windows Home Server.

Каков наилучший способ сделать это? я могу заставить свой домашний сервер получать дамп удаленного сервера каждую ночь? Пропускная способность не имеет большого значения, но если бы я мог просто скопировать любые новые регистрации на сервер SVN на моем домашнем сервере, это было бы хорошо.

Любые предложения приветствуются.

Ответы [ 8 ]

115 голосов
/ 21 февраля 2010

Просто используйте команду svnsync .

Сначала создайте свежий репозиторий на своем домашнем компьютере.

svnadmin create c:\backuprepo

Или в Unix:

svnadmin create ./backuprepo

Затем создайте файл с именем pre-revprop-change.bat:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat

Или в Unix:

echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 

, затем инициализируйте синхронизацию:

svnsync init file:///c:/backuprepo https://url/of/your/repository

Или в Unix:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository

После этого вы можете просто запускать

svnsync sync file:///c:/backuprepo

один раз в день, и вы получите только те изменения, которыееще нет в вашем резервном хранилище.В первый раз это займет некоторое время, но после того, как вы синхронизируете свой резервный репозиторий с реальным, потребуется всего несколько секунд, чтобы синхронизировать его, потому что только те ревизии, которые являются новыми, должны быть синхронизированы.

16 голосов
/ 02 мая 2012

Начиная с Subversion 1.7, вы также можете использовать новую команду svnrdump. Из документов:

Дамп, то есть генерировать поток дампа репозитория, ревизии элемента репозитория, расположенного в SOURCE_URL, с выводом информации в стандартный вывод.

Использование будет:

svnrdump dump http://example.com/repos/ > repos.dump

Это создает «файл дампа» хранилища в repos.dump. Это полная резервная копия данных вашего репозитория, включая историю, но не может быть прочитана напрямую клиентом Subversion. Если вам необходимо восстановить эти данные, используйте стандартные инструменты svnadmin:

svnadmin create c:\backup-repos
svnadmin load c:\backup-repose < repos.dump

Не проводил никаких испытаний, но это может закончиться медленнее, чем svnsync. svnrdump будет делать полный дамп хранилища каждый раз, где я предполагаю, что synsync будет импортировать изменения в хранилище только с момента последнего запуска. Тем не менее, у вас будет один файл, содержащий весь ваш репозиторий, с которым может или не быть проще работать.

Обратите внимание, что вам может потребоваться передать выходные данные с svnrdump по gzip или аналогичную программу, чтобы, возможно, значительно уменьшить размер выводимого файла.

11 голосов
/ 24 апреля 2010

создайте свой локальный репозиторий

svnadmin create /Users/jsmith/repo

создать пустой скрипт ловушки pre-revprop-change

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

сделать исполняемый скрипт ловушки pre-revprop-change

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

инициализировать svnsync

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

синхронизировать репо

svnsync sync file:////Users/jsmith/repo

7 голосов
/ 20 февраля 2010

rsync (или DeltaCopy , представляющий собой пользовательский интерфейс Windows поверх него) будет хорошим вариантом для постепенного копирования полного хранилища на уровне файловой системы.

Вы также можете использовать svnsync для копирования новых ревизий непосредственно с одного сервера SVN на другой.

2 голосов
/ 20 февраля 2010

EFraim упомянул rsync, пока я писал это, так что это покрыто.

Если вы не хотите с этим работать, Subversion Book предлагает опцию svnadmin dump --incremental, объясненную здесь:

Однако, чтобы сделать это успешно, вы должны манипулировать номерами ревизий - rsync'ing каталоги необработанных данных репозитория будет проще.

Сложной частью, вероятно, будет настройка rsync, чтобы ваш локальный и удаленный компьютер могли безопасно обмениваться данными (т. Е. Настроить службу SSH на сервере 2003). DeltaCopy, который упоминает Вим, очень интересен и станет моим первым выстрелом; только для работы с командной строкой, вот руководство по как запустить Rsync как службу в Windows 2003 .

2 голосов
/ 20 февраля 2010

Вы можете использовать скрипт на удаленном сервере, который создает дамп хранилища, а затем копирует его на локальный компьютер (или оставляет его в предопределенном месте для копирования на локальном компьютере)

Вы можете синхронизировать каталоги резервного копирования с rsync или scp .

Сценарий может быть запущен с «Запланированными задачами» и может создавать файлы резервных копий с уникальными именами, которые впоследствии будут синхронизироваться вышеуказанным способом на вашем локальном компьютере. (а затем возможно удаляется)

1 голос
/ 24 апреля 2010

Я бы использовал svnsync или svnadmin hotcopy, поскольку оба эти метода гарантированно копируют действительные данные из хранилища, даже если транзакция выполняется. Другие методы синхронизации файлов могут быть не такими надежными, в зависимости от формата хранилища.

0 голосов
/ 10 мая 2015

В Mac OS X 10.10 команда svnrdump находится здесь:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

Вы можете использовать ответ выше joesdiner.

...