Я новичок в SVN, и я хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?
Стратегии резервного копирования хранилища SVN
Ответ 1
Вы можете использовать что-то вроде (Linux):
svnadmin dump repositorypath | gzip > backupname.svn.gz
Так как Windows не поддерживает GZip, это просто:
svnadmin dump repositorypath > backupname.svn
Ответ 2
Мы используем svnadmin hotcopy, например:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
По книга:
Вы можете запустить эту команду в любое время и сделать безопасную копию репозитория, независимо от того, используют ли другие процессы репозиторий.
Вы можете, конечно, ZIP (желательно 7-Zip) резервной копии. ИМХО Это самый простой способ резервного копирования: в случае катастрофы мало что делать, кроме как разархивировать его обратно.
Ответ 3
Там находится hotbackup.py script, доступный на веб-сайте Subversion, который весьма удобен для автоматизации резервного копирования.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Ответ 4
Вот Perl script, который будет:
- Резервное копирование репо
- Скопируйте его на другой сервер через SCP
- Получить резервную копию
- Создайте тестовый репозиторий из резервной копии
- Выполните тестовую проверку
- Отправьте сообщение по электронной почте с любыми ошибками (через cron)
script:
my $svn_repo = "/var/svn";
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";
$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;
my $dump_command = "svnadmin -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";
#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;
Script источник и более подробная информация о рациональности для этого типа резервного копирования.
Ответ 5
Я использую svnsync, который устанавливает удаленный сервер как зеркало/ведомый. У нас был сервер, спустившийся две недели назад, и я смог легко переключить подчиненную на основное место (только для reset UUID в подчиненном репозитории исходный файл).
Другим преимуществом является то, что синхронизация может выполняться средним человеком, а не как задача на любом из серверов. У меня был клиент для двух виртуальных частных сетей, синхронизирующий репозиторий между ними.
Ответ 6
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
Эта подкоманда делает полную "горячую" резервную копию вашего репозитория, включая все перехватчики, файлы конфигурации и, конечно же, файлы базы данных.
Ответ 7
-
Вы можете создать резервную копию репозитория (дамп) с помощью
svnadmin dump
. -
Затем вы можете импортировать его с помощью
svnadmin load
.
Подробная информация в SVNBook: "Перенос данных репозитория с помощью svnadmin"
Ответ 8
svnbackup в Google Code, консольном приложении .NET.
Ответ 9
В принципе безопасно копировать папку репозитория, если сервер svn остановлен. (источник: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D)
Итак, если вам разрешено останавливать сервер, сделайте это и просто скопируйте репозиторий либо с помощью некоторого script, либо с помощью средства резервного копирования. Cobian Backup подходит здесь, так как он может автоматически останавливать и запускать сервисы, и он может выполнять инкрементное резервное копирование, поэтому вы только создаете резервные копии частей репозитория, которые недавно изменились (полезно, если репозиторий большой, и вы выполняете резервное копирование до удаленного места).
Пример:
- Установить Cobian Backup
-
Добавьте задачу резервного копирования:
-
Установите источник в папку репозитория (например,
C:\Repositories\
), -
Добавить событие предварительного резервного копирования
"STOP_SERVICE"
VisualSVN, -
Добавить событие после резервного копирования,
"START_SERVICE"
VisualSVN, -
Задайте другие параметры по мере необходимости. Мы установили инкрементные резервные копии, включая удаление старых, резервное копирование, назначение, сжатие, вкл. архивирование и т.д.
-
-
Profit!
Ответ 10
Здесь инструмент GUI Windows для создания дампа локальных и удаленных репозиториев subversion:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
Описание инструмента говорит:
Этот простой инструмент позволяет сделать резервную копию дампа локального и удаленного репозитория подрывной деятельности. Программное обеспечение работает так же, как и "svnadmin", но не является интерфейсом GUI над ним. Вместо этого используйте непосредственно библиотеки subversion, чтобы позволить создавать дампы в автономном режиме без какого-либо другого дополнительного инструмента.
Надеюсь, что эта помощь...
Ответ 11
Мне нравится просто копировать весь каталог репо в мое резервное хранилище. Таким образом, если что-то произойдет, вы можете просто скопировать каталог обратно и быть готовым к немедленному выполнению.
Просто убедитесь, что при необходимости сохраните разрешения. Обычно это проблема только для Linux-машин.
Ответ 12
Если вы используете формат репозитория FSFS (по умолчанию), вы можете скопировать репозиторий самостоятельно, чтобы сделать резервную копию. С более старой системой BerkleyDB репозиторий не является независимым от платформы, и вы обычно хотели бы использовать дамп svnadmin.
тема документации svnbook для резервного копирования рекомендует команду svnadmin hotcopy
, так как она позаботится о таких проблемах, как используемые файлы и т.д.
Ответ 13
существует два основных способа резервного копирования svn-сервера: сначала hotcopy, который создаст копию файлов вашего репозитория, основная проблема с этим подходом заключается в том, что он сохраняет данные о базовой файловой системе, поэтому у вас могут быть некоторые трудности пытаясь восстановить этот вид резервной копии в другом виде сервера svn или другой машине. существует другой тип резервной копии, называемый дампом, эта резервная копия не сохранит никакой информации о базовой файловой системе и ее пригодности для любого типа SVN-сервера, основанного на подрывной деятельности tigiris.org.
о инструменте резервного копирования вы можете использовать инструмент svnadmin (он может делать hotcopy и dump) из командной строки, эта консоль находится в том же каталоге, где живет ваш svn-сервер, или вы можете использовать инструменты для резервного копирования svn./p >
Моя рекомендация заключается в том, что вы делаете оба типа резервных копий и выходите из офиса в свою учетную запись электронной почты, службу amazon s3, ftp или azure, так что у вас будет резервная копия безопасности без необходимости размещения сервера svn где-то из вашего офиса.
Ответ 14
Для размещенных репозиториев вы можете с тех пор, как svn версии 1.7 использовать svnrdump
, что аналогично svnadmin dump
для локальных репозиториев. Эта статья обеспечивает приятную прогулку, которая по существу сводится к:
svnrdump dump /URL/to/remote/repository > myRepository.dump
После того, как вы загрузили файл дампа, его можно импортировать локально
svnadmin load /path/to/local/repository < myRepository.dump
или загрузите его на хост по вашему выбору.
Ответ 15
Для ежедневного и полного резервного копирования просто используйте скрипты резервного копирования SVN здесь.
Ответ 16
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%
echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"
svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn
Это пакетный файл, который у меня работает, который выполняет мои резервные копии
Ответ 17
Я скомпилировал шаги, которые я выполнил, чтобы сделать резервную копию удаленного SVN репозиторий моего проекта.
install svk (http://svk.bestpractical.com/view/SVKWin32)
install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)
svk mirror //local <remote repository URL>
svk sync //local
Это требует времени и говорит, что он извлекает журналы из репозитория. Он создает набор файлов внутри C:\Documents and Settings\nverma\.svk\local
.
Чтобы обновить этот локальный репозиторий с последним набором изменений с удаленного, просто запустите предыдущую команду время от времени.
Теперь вы можете играть в своем локальном репозитории (/home/user/.svk/local
в этом примере), как если бы это был обычный SVN-репозиторий!
Единственная проблема с этим подходом заключается в том, что локальный репозиторий создается с добавлением ревизии по фактической ревизии в удаленном репозитории. Как писал кто-то:
Команда svk miror генерирует фиксацию в только что созданном репозитории. Таким образом, все коммиты, созданные последующей синхронизацией, будут иметь номера версий, увеличенные на единицу, по сравнению с удаленным публичным репозиторием.
Но это было нормально для меня, так как я только хотел, чтобы время резервного копирования удаляло время репозитория, и ничего больше.
Проверка:
Чтобы проверить, используйте SVN-клиент с локальным репозиторием следующим образом:
svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto>
Затем эта команда переходит к проверке последней версии из локального репозитория. В конце он говорит Checked out revision N
. Этот N
был больше, чем фактическая ревизия, найденная в удаленном репозитории (из-за проблемы, упомянутой выше).
Чтобы проверить, что svk также привезла всю историю, проверка SVN выполнялась с различными более старыми версиями с помощью -r
с 2, 10, 50 и т.д. Затем были подтверждены файлы в <local-dir-path-to-checkout-onto>
из этой версии.
В конце запишите каталог C:/Documents and Settings\nverma/.svk/local/
и сохраните zip где-нибудь. Продолжайте делать это регулярно.
Ответ 18
как говорили другие, hot-backup.py из команды Subversion имеет некоторые приятные функции поверх простого svnadmin hotcopy
Я запускаю запланированное задание на python script, которое содержит все мои репозитории на машине и использует hotbackup для хранения горячих копий на несколько дней (параноидальное повреждение) и svnadmin svndump
на удаленной машине. Реставрация на самом деле очень проста - пока.
Ответ 19
1.1 Создание дампа из репозитория SVN (Subversion)
svnadmin dump /path/to/reponame > /path/to/reponame.dump
Реальный пример
svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump
1.2 Gzip Created Dump
gzip -9 /path/to/reponame.dump
Реальный пример
gzip -9 /backups/testrepo.dump
1.3 SVN Dump и Gzip Dump с одним слоем
svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz
Реальный пример
svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz
Резервное копирование (дамп) и восстановление (загрузка) репозитория SVN (Subversion) в Linux.
Ссылка: svn subversion backup andrestore