Стратегии резервного копирования репозитория SVN

Я новичок в SVN и хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?

VisualSVN Server для Windows включает встроенную функцию резервного копирования и проверки репозиториев SVN по расписанию: visualsvn.com/server/features/backup

bahrep 23.03.2017 21:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
195
1
142 491
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

Мне нравится просто копировать весь каталог репо в место для резервной копии. Таким образом, если что-то случится, вы можете просто скопировать каталог обратно и сразу же быть готовым к работе.

Просто не забудьте сохранить разрешения, если это необходимо. Обычно это проблема только на машинах Linux.

это не совсем безопасно, если кто-то совершает фиксацию во время операции копирования - у меня такое случалось со мной, даже когда только 4 человека имели доступ к репо и использовали его нечасто. См. Ответ Дункана об использовании горячей копии.

nickf 26.04.2009 16:08

Однако, если вы работаете полностью в одиночку, я полагаю, это безопасный способ резервного копирования репо? Я использую Subversion в своих личных проектах, и сейчас этим занимаюсь.

Andrew Garrison 04.02.2011 05:45
Ответ принят как подходящий

Вы можете использовать что-то вроде (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Поскольку Windows не поддерживает GZip, это просто:

svnadmin dump repositorypath > backupname.svn

Я не знаю наверняка, но наверняка некоторые инструменты, такие как 7-zip, смогут сжимать данные из STDIN, что означает, что вы также можете использовать первый стиль в Windows.

nickf 26.04.2009 16:06

Я просто смотрю на это сам, и один комментарий из документации svnbook.red-bean.com/nightly/en/… заключается в том, что вы получите очень большой вывод svnadmin dump, если вы не используете параметр --deltas.

Jason S 15.10.2009 00:22

И Windows поддерживает gzip, просто загрузите его с веб-страницы unxutils unxutils.sourceforge.net

Jason S 15.10.2009 00:24

Использование 7Zip: svnadmin dump repositorypath | "%ProgramFiles%-Zipz.exe" a backup.7z -sibackupname.svn При этом будет создан файл с именем «backup.7z», содержащий единственный файл «backupname.svn», выводимый из svnadmin dump.

Matt 13.01.2010 18:59

У нас десятки репозиториев. Как поддержать их всех сразу?

Josh Stodola 16.03.2010 22:10

В комментарии @ RobotCaleb ниже вы можете использовать svnadmin load для восстановления из резервной копии дампа.

kdmurray 15.03.2011 09:11

@ Джош Стодола трепать: for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;

Fedir RYKHTIK 21.11.2011 15:41

как загрузить обратно svn в linux из резервной копии?

senzacionale 26.06.2012 21:48

Еще пара примечаний: вы, возможно, захотите добавить --deltas, если хотите создать минимально возможный дамп. Мне нравится комментарий Мэтта о прокачке через 7z, мне нравится повышать компрессию с помощью переключателя -mx9. В командной строке 7z много возможностей. Проверьте ссылку в файле справки.

Yoopergeek 25.09.2012 17:29

svnadmin dump repositorypath > backupname.svn Где эта ссылка сохранит резервную копию ?? Я имею ввиду путь ??

Sizzling Code 07.05.2013 10:09

резервное копирование и восстановление: svnadmin dump C:\SVN\MyProject > C:\tmp\MyProject.bak - svnadmin load C:\SVN\MyProject < C:\tmp\MyProject.bak Если вы хотите восстановить в новый каталог, файл ./repo/format должен существовать. Я обнаружил, что проще всего просто создать новый репозиторий и восстановить его поверх него.

haventchecked 14.08.2013 21:51

А что, если я не администратор svn?

Luc 04.06.2014 23:27
  • Вы можете создать резервную копию репозитория (свалка) с помощью svnadmin dump.

  • Затем вы можете импортировать его с помощью svnadmin load.

Подробная ссылка в SVNBook: «Перенос данных репозитория с помощью svnadmin»

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

This subcommand makes a full “hot” backup of your repository, including all hooks, configuration files, and, of course, database files.

На веб-сайте Subversion есть сценарий hotbackup.py, который очень удобен для автоматизации резервного копирования.

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in

Я считаю, что это ссылка, которая работает на скрипт горячего резервирования: svn.apache.org/repos/asf/subversion/trunk/tools/backup/…

Carvell Fenton 09.02.2011 18:30

Если вы используете формат репозитория FSFS (по умолчанию), вы можете скопировать сам репозиторий, чтобы сделать резервную копию. В более старой системе BerkleyDB репозиторий не зависит от платформы, и вы, как правило, захотите использовать дамп svnadmin.

тема документации svnbook для резервного копирования рекомендует команду svnadmin hotcopy, поскольку она позаботится о таких проблемах, как используемые файлы и тому подобное.

Мы используем горячую копию svnadmin, например:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

Согласно книга:

You can run this command at any time and make a safe copy of the repository, regardless of whether other processes are using the repository.

Вы, конечно, можете заархивировать (желательно 7-Zip) резервную копию. ИМХО Это самый простой из вариантов резервного копирования: в случае катастрофы мало что нужно сделать, кроме как разархивировать его обратно на место.

Я думаю, что дамп svnadmin предпочтительнее для резервного копирования по нескольким причинам. См. svn.haxx.se/users/archive-2005-05/0842.shtml

daremon 01.08.2009 22:38

@daremon: Я предлагаю вам прочитать ответы на сообщения, на которые вы ссылаетесь, в частности, тот, в котором упоминается дамп svnadmin, не включает файлы управления репо.

Powerlord 20.10.2009 19:00

закрытая гонка, но я голосую за svnadmin dump после прочтения ответов, предложенных Р. Бемроузом

mobibob 23.04.2011 21:17

Команда hotcopy не перезаписывает и не увеличивает размер создаваемых ею резервных копий. Поэтому, если вы планируете автоматизировать его в Windows с помощью планировщика задач, посмотрите следующий командный файл: cfchimp.com/wordpress/2008/05/…

Ryan Sampson 07.06.2011 21:42

Слово предупреждения. Не копируйте зеркальную копию репозитория, созданную с помощью svnsync, во время работы svnsync! Полученная копия может быть повреждена. Смотрите эту ветку для деталей: subversion.open.collab.net/ds/…

zvolkov 29.11.2011 22:27

Я использую svnsync, который настраивает удаленный сервер как зеркало / ведомый. Две недели назад у нас был отказ сервера, и я смог довольно легко переключить подчиненное устройство в основное положение (нужно было только сбросить UUID в репозитории подчиненного устройства на исходный).

Еще одно преимущество заключается в том, что синхронизация может выполняться посредником, а не как задача на любом сервере. У меня был клиент для двух VPN, синхронизирующих репозиторий между ними.

так что он, очевидно, синхронизирует последние версии репо между двумя?

PositiveGuy 18.09.2009 00:09

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

Tom Mayfield 18.09.2009 19:55

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

8DH 16.12.2013 17:15

как говорили другие, hot-backup.py от команды Subversion имеет некоторые приятные функции по сравнению с простым svnadmin hotcopy

Я запускаю запланированную задачу на скрипте python, который выполняет поиск всех моих репозиториев на машине и использует горячее резервное копирование для хранения горячих копий на несколько дней (параноик коррупции) и svnadmin svndump на удаленной машине. Реставрация от этого действительно проста - пока что.

Вот сценарий Perl, который:

  1. Сделайте резервную копию репо
  2. Скопируйте его на другой сервер через SCP
  3. Получить резервную копию
  4. Создать тестовый репозиторий из резервной копии
  5. Сделайте пробную проверку
  6. Пишите вам с любыми ошибками (через cron)

Сценарий:

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`;

Исходный код скрипта и более подробная информация о рациональном использовании этого типа резервного копирования.

Для решения ежедневного и полного резервного копирования просто используйте Скрипты резервного копирования SVN здесь.

svnbackup в Google Code, консольном приложении .NET.

есть 2 основных метода резервного копирования svn-сервера, первый - это hotcopy, который создаст копию файлов вашего репозитория, основная проблема с этим подходом заключается в том, что он сохраняет данные о базовой файловой системе, поэтому у вас могут возникнуть некоторые трудности при попытке репостора такого рода резервное копирование на другом сервере svn или другой машине. есть еще один тип резервной копии, называемый дампом, эта резервная копия не сохраняет никакой информации о базовой файловой системе и ее пригодности для любого типа сервера SVN, основанного на tigiris.org subversion.

Что касается инструмента резервного копирования, вы можете использовать инструмент svnadmin (он может выполнять горячее копирование и дамп) из командной строки, эта консоль находится в том же каталоге, где находится ваш сервер svn, или вы можете использовать Google для инструментов резервного копирования svn.

Я рекомендую вам делать оба вида резервных копий и переносить их из офиса на свой почтовый ящик, сервис amazon s3, ftp или сервисы Azure, так у вас будет безопасная резервная копия без необходимости размещать сервер svn где-то вне твой офис.

Я скомпилировал шаги, которые я выполнил для создания резервной копии удаленного 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!

Единственная проблема с этим подходом состоит в том, что локальный репозиторий создается с приращением ревизии к фактической ревизии в удаленном репозитории. Как писал кто-то:

The svk miror command generates a commit in the just created repository. So all the commits created by the subsequent sync will have revision numbers incremented by one as compared to the remote public repository.

Но для меня это было нормально, поскольку мне время от времени требовалось только резервное копирование удаленного репозитория, и ничего больше.

Проверка:

Для проверки используйте клиент 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/ и сохраните его где-нибудь. Продолжайте делать это регулярно.

@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-Zipz.exe" a "\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

Это пакетный файл, который у меня запущен, и он выполняет резервное копирование.

Обычно безопасно копировать папку репозитория, если svn-сервер остановлен. (источник: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D)

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

Пример:

  1. Установить Cobian Backup
  2. Добавить задание резервного копирования:

    • Установите источник в папку репозитория (например, C:\Repositories\),

    • Добавить событие перед резервным копированием "STOP_SERVICE" VisualSVN,

    • Добавить событие после резервного копирования, "START_SERVICE" VisualSVN,

    • При необходимости установите другие параметры. Мы настроили инкрементные резервные копии, включая удаление старых, расписание резервного копирования, место назначения, сжатие, вкл. разделение архива и т. д.

  3. Выгода!

Для размещенных репозиториев вы можете, начиная с версии 1.7 svn, использовать svnrdump, который аналогичен svnadmin dump для локальных репозиториев. Этот статья обеспечивает приятное пошаговое руководство, которое, по сути, сводится к следующему:

svnrdump dump /URL/to/remote/repository > myRepository.dump

После того, как вы скачали файл дампа, вы можете импортировать его локально.

svnadmin load /path/to/local/repository < myRepository.dump

или загрузите его на выбранный вами хост.

Вот инструмент Windows с графическим интерфейсом для создания дампов локальных и удаленных репозиториев Subversion:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

В описании инструмента сказано:

Этот простой инструмент позволяет сделать резервную копию дампа локального и удаленного репозитория Subversion. Программное обеспечение работает так же, как "svnadmin", но не является графическим интерфейсом над ним. Вместо этого используйте напрямую библиотеки Subversion, чтобы позволить создавать дамп в автономном режиме без каких-либо других дополнительных инструментов.

Надеюсь на эту помощь ...

Спасибо, что поделились этим, делает в точности так, как указано.

Ed DeGagne 11.03.2016 22:28

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

gzip -9 /path/to/reponame.dump

Реальный пример

gzip -9 /backups/testrepo.dump

1.3 Дамп SVN и Gzip-дамп с однострочником

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 резервное копирование и восстановление

Другие вопросы по теме