版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份和同步版本库。
1. 完全备份:
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。比如有如下版本库:
D:\svnroot├─project1│ ├─conf│ ├─dav│ ├─db│ │ ├─revprops│ │ ├─revs│ │ └─transactions│ ├─hooks│ └─locks└─project2 ├─conf ├─dav ├─db │ ├─revprops │ ├─revs │ └─transactions ├─hooks└─locks
如果要把project1备份到D:\svnrootbackup目录下,只需要运行:svnadmin hotcopy d:\svnroot\project1 d:\ svnrootbackup \project1
PS:如果我们目录下有很多版本库,需要为每个版本库写这样一条语句备份,必须想办法优化这个过程。为此,建立以下的2个bat文件,
使用的时候,只需要修改backup.bat开头的三个路径,将两个脚本拷贝到"SVN_ROOT"下就可以了。根据以上的配置,你只需要运行backup.bat,就可以把"SVN_ROOT"下的版本库都备份到"BACKUP_SVN_ROOT"里,并且存放在备份所在的目录里。
2. 增量备份:尽管完全备份非常简单,但是也是有代价的,当版本库非常巨大时,经常进行完全备份是不现实的,也并不必要,但是一旦版本库在备份之间发生问题,该如何呢,这里我们就用到了增量备份。增量备份通常要与完全备份结合使用,记录着每次Subversion提交的变化,然后在需要恢复时能够回到最新的可用状态。我们使用的是,svnadmin dump命令进行增量的备份,使用方法是:svnadmin dump d:\sourcecode\project1 --revision 15 --incremental > d:\sourcecode\dumpfile
上面的命令实现了对修订版本15进行增量的备份,其中的输出文件dumpfile只保存了修订版本15更改的内容
恢复增量备份时,使用方法是:svnadmin load d:\sourcecode\project1 < d:\sourcecode\dumpfile上面的命令实现了对增量备份文件恢复到版本库project1中
使用钩子脚本Hooks实现自动增量备份:1) 建立deltabackup.bat文件,内容为:@echo 正在备份版本库%2......%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump@echo 版本库%2成功备份到了%3!2) 建立post-commit.bat文件,内容为:echo offset SVN_HOME="C:\Program Files\Subversion"set SVN_ROOT=D:\svnrootset UNIX_SVN_ROOT=D:/svnrootset DELTA_BACKUP_SVN_ROOT=D:\svnrootbak\deltaset LOG_FILE=%1\backup.logecho backup revision %2 >> %LOG_FILE%for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2goto end:end3) 把以上两个脚本可以直接拷贝到版本库的hooks目录下,就可以实现版本库的自动备份。
3. 同步版本库:同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。例如:同步版本库d:\sourcecode\project11) 新建一个空的版本库project2运行命令:svnadmin create d:\sourcecode\project2
2) 为新的版本库创建pre-revprop-change钩子脚本(hook script)在d:\sourcecode\project2\hooks目录下新建一个空的pre-revprop-change.bat文件
3) 初始化版本库运行命令:svnsync init file:///d:/sourcecode/project2 file:///d:/sourcecode/project1
4) 同步版本库运行命令:svnsync sync file:///d:/sourcecode/project2 5) 至此,版本库同步已经完成。在使用新的版本库之前,还需要根据需要对版本库的访问权限等进行配置。
使用钩子脚本Hooks实现自动同步:1) 建立post-commit.bat文件,内容为:echo offset SVN_HOME="D:\Subversion"%SVN_HOME%\bin\svnsync sync --non-interactive svn://localhost/project22) 把post-commit.bat文件放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步转自:http://hi.baidu.com/vb1980/blog/item/1306ee226ff370a74623e8a9.html
Powered by: IT博客 Copyright © 巴西木