Как создать резервную копию удаленного хранилища SVN
В настоящее время я перемещаю свой SVN-сервер с моего домашнего сервера на мой удаленный сервер, поэтому я могу получить доступ к нему более легко из других мест.
Мой удаленный сервер не архивируется, поэтому я хочу регулярно поддерживать его на своем домашнем сервере.
Удаленный сервер - это сервер Windows 2003. Домашний сервер - это Windows Home Server.
Каков наилучший способ сделать это? могу ли я заставить мой домашний сервер получать дамп удаленного сервера каждую ночь? Полоса пропускания не является огромным соображением, но если бы я мог просто скопировать любые новые проверки на SVN-сервер на моем домашнем сервере, это было бы хорошо.
Любые предложения приветствуются.
Ответы
Ответ 1
Просто используйте команду 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
один раз в день или около того, и вы получите только те изменения, которых еще нет в вашем резервном хранилище. В первый раз это займет некоторое время, но после того, как вы синхронизируете свой резервный репозиторий с реальным, потребуется всего несколько секунд, чтобы синхронизировать его, потому что только те ревизии, которые являются новыми, должны быть синхронизированы.
Ответ 2
В качестве subversion 1.7 вы также можете использовать новую команду svnrdump
. Из документов:
Дамп, то есть сгенерируйте поток дампа репозитория из-ревизий элемента репозитория, расположенного в SOURCE_URL, распечатав информацию до стандартного вывода.
Использование:
svnrdump dump http://example.com/repos/ > repos.dump
Это создает "файл дампа" репозитория в repos.dump
. Это полная резервная копия данных вашего репозитория, включая историю, но недоступна для чтения клиентом подрывной деятельности. Если вам нужно восстановить эти данные, используйте стандартные инструменты svnadmin
:
svnadmin create c:\backup-repos
svnadmin load c:\backup-repose < repos.dump
Не проводили никаких тестов, но это может быть медленнее, чем svnsync
. svnrdump
будет делать полный дамп репозитория каждый раз, когда я предполагаю, что synsync
будет импортировать изменения в репозитории с момента последнего запуска. У вас будет один файл, содержащий весь ваш репозиторий, хотя это может быть проще или проще.
Обратите внимание, что вы можете подключить вывод svnrdump
через gzip
или аналогичную программу, чтобы, возможно, значительно уменьшить размер выводимого файла.
Ответ 3
создать локальный репозиторий
svnadmin create /Users/jsmith/repo
создать пустой крюк с предварительным revprop-изменением script
echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change
сделать предварительный revpp-change hook script исполняемый
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
Ответ 4
rsync (или DeltaCopy, который является пользовательским интерфейсом Windows поверх него) был бы хорошим выбором для постепенного копирования полного хранилища на уровне файловой системы.
Вы также можете использовать svnsync для копирования новых версий непосредственно с одного сервера SVN на другой.
Ответ 5
Вы можете использовать script на удаленном сервере, который выгружает репозиторий, а затем копирует его на локальный компьютер (или оставляет его в предопределенном месте для копирования локального компьютера).
Вы можете синхронизировать каталоги резервных копий с rsync или УПП.
script может быть запущен с помощью "Запланированных заданий" и может создавать уникальные файлы резервных копий, которые позже будут синхронизированы указанным выше способом с вашего локального компьютера. (а затем, возможно, удалено)
Ответ 6
EFraim упомянул rsync, в то время как я написал это так, чтобы он охватывал.
Если вы не хотите работать с этим, книга Subversion предлагает опцию svnadmin dump --incremental
, описанную здесь:
Однако, чтобы сделать это успешно, вам нужно будет манипулировать номерами ревизий - проще будет синхронизировать исходные каталоги данных репозитория.
Жесткой частью, вероятно, будет настройка rsync, чтобы ваш локальный и удаленный компьютер мог безопасно связываться (т.е. настроить службу SSH на сервере 2003 года). DeltaCopy, о котором говорит Вим, очень интересен и будет моим первым выстрелом; для операции с командной строкой, вот как на как запустить Rsync как службу в Windows 2003.
Ответ 7
Я бы использовал либо svnsync
, либо svnadmin hotcopy
, так как обе эти технологии гарантированно скопируют действительные данные из репозитория, даже если транзакция выполняется. Другие методы синхронизации файлов могут быть не такими надежными, в зависимости от формата репозитория.
Ответ 8
В Mac OS X 10.10 команда svnrdump
находится здесь:
-
/Library/Developer/CommandLineTools/usr/bin/svnrdump
Затем вы можете использовать ответ выше joesdiner.
Ответ 9
Чтобы расширить ответ стефана, вот несколько пакетных сценариев Windows, которые помогут немного автоматизировать процесс.
СВН-резервного копирования init.bat
@echo off
set /P directory="Local Directory: "
set /P URL="Svn URL: "
echo "Running SVN backup";
@echo on
svnadmin create %directory%
echo exit 0 > %directory%\hooks\pre-revprop-change.bat
svnsync init file:///%directory% %URL%
svnsync sync file:///%directory%**strong text**
Этот скрипт создаст репозиторий svn, проверит его и немедленно выполнит синхронизацию. При запуске сценария просто введите каталог для локального размещения репо и URL-адрес используемого сервера.
СВН-резервного копирования run.bat
for /d %%i in (%~dp0*) do ( svnsync sync file:///%%i )
Это перебирает все каталоги и запускает команду svnsync. Если у вас есть несколько репозиториев, проверьте их в одной папке. Это можно легко добавить в качестве Задачи в Windows, чтобы обновить все ваши репозитории сразу.
Структура папок
Я использую структуру папок как таковую:
.
├── svn-backups
| ├── repo-1
| ├── repo-2
| ├── repo-3
| ├── svn-backup-init.bat
| └── svn-backup-run.bat