`
zhaoshijie
  • 浏览: 2244766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SVN 之 备份

阅读更多
关键字: svn 备份
版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。
在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文件,
simplebackup.bat:
@echo 正在备份版本库%1......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!

backup.bat:
echo off
rem Subversion的安装目录
set SVN_HOME="D:\Subversion"
rem 所有版本库的父目录
set SVN_ROOT=D:\svnroot
rem 备份的目录
set BACKUP_SVN_ROOT=D:\svnrootbak
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simplebackup.bat "%%~fI" %%~nI
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 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 off
set SVN_HOME="D:\Subversion"
%SVN_HOME%\bin\svnsync sync     --non-interactive svn://localhost/project2
2) 把post-commit.bat文件放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步




转自:http://hi.baidu.com/vb1980/blog/item/1306ee226ff370a74623e8a9.html
分享到:
评论

相关推荐

    SVN 备份脚本

    实现svn增量备份、全量备份。SVN 备份脚本.zip

    SVN自动备份代码/文档功能

    SVN自动备份功能,按ReadMe配置下路径即可直接使用; 给公司SVN服务器进行代码文件和文档的自动备份; 设置Windows计划任务即可每天定时执行备份操作

    SVN完全备份和增量备份

    SVN完全备份和增量备份 近存放项目的服务器要换,所以要对SVN项目进行备份,有几个项目的版本 ... SVN备份操作

    Svn最强大的Windows下实现自动全量增量备份和异地备份,一切自动化完成

    1.SVN备份内容 SVN在Windows下的自动备份实现,包括: 1)SVN目录的全备份(1周或1个月备份1次,由windows计划来调度执行); 2)SVN增量备份(每日备份1次,由windows计划来调度执行)。 2. SVN备份流程 上述2类...

    linux svn自动备份

    linux 下svn 自动备份脚本

    SVN增量备份-附带脚本

    svn增量备份,附带涉及到的脚本内容,使用方法文档说明

    windows下svn的备份

    主要是windows下svn的备份,该备份脚本已通过测试运行。

    Svn完全备份与增量备份

    Svn完全备份与增量备份,修改文件时自动执行增量备份。节省空间。

    svn自动备份脚本.zip

    svn自动增量备份 rem set logfile=svndump.log set SVN_HOME=C:\Progra~1\Subversion\bin set SVN_ADMIN="%SVN_HOME%\svnadmin.exe" set SVN_LOOK="%SVN_HOME%\svnlook.exe" set SVN_REPOROOT=e:\svn set RAR_CMD="C...

    SVN全局备份

    数据安全,SVN全局备份操作说明及解释,为SVN全局备份做示例

    svn增量备份脚本

    SVN增量备份脚本,pl文件 ,在linux下 直接vi 后拷入内容,chmod +x 后写入crontab 定期执行

    svnserver备份脚本及还原说明.rar

    svnserver备份脚本,其中包含了备份repository,压缩备份文件、复制备份文件到远程计算机和还原备份说明。svn服务器的时间格式要改成YYYY-MM-DD,不然Backup.bat脚本会报错。最好不要使用svnserver4以上的版本,因为...

    windows下svn异地备份与还原

    本文介绍了svn的三种备份方法,其中svnsync是我在windows环境下试验成功过的,而很多其他资料都无法成功,希望能给大家正确的指引 绝对值得大家下载!!!

    SVN备份操作(包括完全备份,增量备份和同步版本库)

    版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份和同步版本库。

    svn代码库如何备份到本地

    svn代码库如何备份到本地

    svn_TortoiseSVN\Svn备份.doc

    svn_TortoiseSVN\Svn备份

    SVN 备份及还原包括逻辑和物理备份

    SVN 备份及还原包括逻辑和物理备份,逻辑备份包含了本地备份和通过FTP脚本的备份,定期执行计划保证数据丢失。里面有3个文档和编写好的bat脚本

    SVN增量备份脚本及MD5加密工具

    该工具和脚本是SVN增量备份所用,经我测试后,完全可以正常使用的,该MD5在备份后,对备份文件进行加密,使用方便:只需要修改注释下的相应路径,添加到系统任务中,即看运行

    SvnBackupApp,Visual SVN Server 备份,Visual SVN 备份,SVN 备份

    Visual SVN Server 备份工具,Visual SVN 备份工具,SVN 备份工具,按天,周,月定时备份,备份文件可加密存储,过期文件可以自动删除。Visual SVN Server 企业版才能用的定时备份任务,SvnBackupApp工具即可办到。...

    SVN备份还原清理BAT

    对网上的SVN备份、还原、清理几天之前的备份进行了测试与修改。 全量备份:fullbackup.bat(使用前先修改目录)、hotcopy.bat 增量备份:svndump.bat(使用前先修改目录)、dump.bat、projectlist.conf(使用前先修改svn...

Global site tag (gtag.js) - Google Analytics