posts - 262,  comments - 221,  trackbacks - 0
【1.业务需求】
作为开发人员,最大的噩梦莫过于自己辛辛苦苦开发的程序由于各种原因而丢失了。所以定期备份资料乃是开发人员的一大美德(我自己重要的资料备份了4份,分别放在不同的地方)。SVN作为代码和文档汇聚之地,定期备份的重要性更是不容置疑。

【2.基本思路】
通常我们备份的方式无非有:完全备份和增量备份两种。完全备份适用于版本库的大小比较小的情况,对于版本库比较大或者已经存在版本库的情况下,则没有必要也不可能使用完全备份了。这时增量备份就是一个很好的选择。

除了完全备份和增量备份,我们还有另外一种方式:版本库同步。这种方法可以在源版本库和目标版本库之间做同步(通常是单向的)。一旦源版本库发生了改变则可以马上通知目标版本库做出相同的改变。

注意:版本库的备份不能简单地使用copy-paste的方法来拷贝复杂版本库的db目录,否则有可能出现数据不完全的情况。

所以我们的备份策略是:
 ①首次备份采用完全备份,后续备份采用增量备份和版本库同步
 ②完全备份在晚上定时进行,增量备份和版本库同步在用户提交时进行

注意:这个策略实际上是有较大问题的(包括备份的方式,频度,时间):通常完全备份会在每周,月进行一次。而增量备份会,版本库同步会在每天晚上定时执行,而不是在每次用户提交后执行,以缩短请求响应。但这里因为本着简单的原则,只是抽取了最简单的策略

【3.相关命令】
SVN用于备份的命令有以下三个,分别对应于完全备份,增量备份,版本库同步。

 ①svnadmin hotcopy
 ②svnadmin dump [--incremental]
 ③svnsync init|sync

关于这三个命令的具体用法,请大家自行参考SVN的用户手册以获得更多资讯。

【4.示例操作】
注:本示例代码均为网上下载,非本人原创。

Example 1:完全备份

fullbackup.bat
@echo off

@echo 不同的系统平台和时间格式设置会影响目录的创建,请先用echo命令输出日期格式并做相应调整

rem Subversion的安装目录
set SVN_HOME=C:\Develop\Subversion

rem 所有版本库的父目录
set SVN_ROOT=C:\Develop\svntest\testRepos

rem 备份的根目录
set BACKUP_SVN_ROOT=C:\Develop\svntest\svnbackup\full

rem 每次备份的子目录
set BACKUP_DIRECTORY=<