Как я могу делать ежедневные резервные копии моих репозиториев VisualSVN?
Это на машине Windows Server 2003 с VisualSVN Server, я думал просто сделать xcopy папки C: \ Репо но я недостаточно знаком с svn, чтобы знать, вызовет ли это проблемы.
Что делать: дамп, горячее копирование или и то, и другое?
Это набор файлов, как и любой другой набор файлов. Используйте любой метод, который вы используете для резервного копирования остальной системы. Поскольку это находится на сервере, я бы подумал, что он уже включен в обычную схему резервного копирования.
Если вы используете полуприличное программное обеспечение для резервного копирования, даже Windows NT Backup, оно должно использовать службу теневого копирования тома, которая позаботится о проблемах с открытыми файлами, если таковые имеются.
Просто копировать файлы репо - плохая идея:
... если вы временно не отключите весь другой доступ к своему репозиторию, простое выполнение рекурсивного копирования каталога может привести к созданию ошибочной резервной копии.
Вы должны использовать svnadmin hotcopy команда.
Обслуживание репозитория> Резервное копирование репозитория
Вы можете написать сценарий и запустить его как запланированную задачу.
Я делаю и дамп, и горячее копирование. Поместите их в пакетный файл и создайте задачу с помощью планировщика задач, чтобы запускать ее ежедневно. Вот мой образец командного файла
!backing up credentials
copy H:\Repositories\authz G:\Repo-Backups\7-22-2013\backup
copy H:\Repositories\authz-windows G:\Repo-Backups\7-22-2013\backup
copy H:\Repositories\htpasswd G:\Repo-Backups\7-22-2013\backup
!full dump
svnadmin dump H:\Repositories\Proj1 > G:\Repo-Backups\7-22-2013\dump\Proj1
svnadmin dump H:\Repositories\Proj2 > G:\Repo-Backups\7-22-2013\dump\Proj2
!hard copy
svnadmin hotcopy H:\Repositories\Proj1 G:\Repo-Backups\7-22-2013\backup\Proj1
svnadmin hotcopy H:\Repositories\Proj2 G:\Repo-Backups\7-22-2013\backup\Proj2
Если у вас есть несколько репозиториев (проектов) для резервного копирования и они часто меняются, было бы проще, если бы небольшая программа создала для вас вышеуказанный командный файл. Вот что я написал для этой цели:
public static void CreateBackupScript(string srcFolder, string desFolder, bool fullDump)
{
if (string.IsNullOrEmpty(srcFolder) || string.IsNullOrEmpty(desFolder))
return;
var dateString = DateTime.Now.ToShortDateString().Replace('/', '-');
var destination = System.IO.Path.Combine(desFolder, dateString, "backup");
if (!Directory.Exists(destination))
Directory.CreateDirectory(destination);
var source = srcFolder + "\\";
var outputScript = "backup.cmd";
using (StreamWriter sw = new StreamWriter(outputScript))
{
sw.WriteLine("!backing up credentials");
sw.WriteLine("copy {0}authz {1}", source, destination);
sw.WriteLine("copy {0}authz-windows {1}", source, destination);
sw.WriteLine("copy {0}htpasswd {1}", source, destination);
// dump
if (fullDump == true)
{
sw.WriteLine("!full dump");
var dumpFolder = System.IO.Path.Combine(desFolder, dateString, "dump");
if (!Directory.Exists(dumpFolder))
Directory.CreateDirectory(dumpFolder);
foreach (var dir in new DirectoryInfo(source).GetDirectories("*.*", SearchOption.TopDirectoryOnly))
{
sw.WriteLine(@"svnadmin dump {0} > {1}\{2}", dir.FullName, dumpFolder, dir.Name);
}
}
//hot copy
sw.WriteLine("!hard copy");
foreach (var dir in new DirectoryInfo(source).GetDirectories("*.*", SearchOption.TopDirectoryOnly))
{
sw.WriteLine(@"svnadmin hotcopy {0} {1}\{2}", dir.FullName, destination, dir.Name);
}
}
}