Подтвердить что ты не робот

Как создать резервную копию удаленного хранилища SVN

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

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

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

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

4b9b3361

Ответ 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