Windows停SVN的备份方案
Windows下SVN的备份方案Windows下SVN的备份方案?版本控制最关键的一件事是保证数据的安全性,不能因为磁盘
Windows下SVN的备份方案
Windows下SVN的备份方案?版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成库的无法挽回的错误,为此必需制定较完备的备份策略.在subversion中,我们有三种备份方式:完全备份,增量备份和同步版本库.?
goto end?
:checkBack?
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。?
goto end?
:end?
使用的时候,只需要修改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 off?
set SVN_HOME="C:/Program Files/Subversion"?
set SVN_ROOT=D:/svnroot?
set UNIX_SVN_ROOT=D:/svnroot?
set DELTA_BACKUP_SVN_ROOT=D:/svnrootbak/delta?
set LOG_FILE=%1/backup.log?
echo backup revision %2 >> %LOG_FILE%?
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2?
goto end?
:end?
3) 把以上两个脚本可以直接拷贝到版本库的hooks目录下,就可以实现版本库的自动备份。?
3. 同步版本库:?
同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。?
例如:同步版本库d:/sourcecode/project1?
1) 新建一个空的版本库project2?
运行命令:?
svnadmin create d:/sourcecode/project2?
2) 为新的版本库创建pre-revprop-change钩子脚本(hook scrīpt)?
在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 off?
set SVN_HOME="D:/Subversion"?
%SVN_HOME%/bin/svnsync sync???? --non-interactive svn://localhost/project2?
2) 把post-commit.bat文件放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步