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

Windows下SVN的备份方案

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



1,完全备份:

最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了.但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造马备份的结果不够准确,失去备份的作用,为此xubversion 提供了"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 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的同步
分享到:
评论

相关推荐

    SVN备份方案

    总结的windows下 SVN 全量 增量备份方案,大家可以参考

    SVN使用手册中文版快速入门

    在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL...

    SVN使用手册中文版.chm

    在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL...

    SVN操作手册中文版网页格式

    目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性,svn客户端和linux下命令行。 目录 1. 简介 1.1. 什么是 TortoiseSVN? 1.2. TortoiseSVN 的历史 1.3. ...

    项目开发过程管理文档模板

    开发过程管理文档,包括bug等级划分标准、Jira上Bug处理流程、JIRA使用规范(草稿)、SVN源代码管理规范、Windows下SVN的备份方案、版本控制规范、软件测试过程及方法指南、软件开发流程规范意见指导书、软件需求变更...

    使用Subversion进行版本控制(针对 Subversion 1.4)

    版本库备份 总结 6. 服务配置 概述 选择一个服务器配置 svnserve服务器 svnserve使用SSH通道 Apache 的 HTTP 服务器 推荐 svnserve,一个自定义的服务器 调用服务器 svnserve作为守护进程 使用svnserve通过inetd ...

    VisualSVN-Serverx64.zip

    是目前操作最为简单、功能最为强大的svn服务端,并且包含mmc管理工具的软件,允许你在Windows平台上轻松安装和管理全功能的Subversion服务器,同时为Subversion存储库提供了完美的备份解决方案,该功能可帮助您每天...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    4.7.3. 在 Windows 资源管理器中的 TortoiseSVN 列 4.7.4. 本地与远程状态 4.7.5. 查看差别 4.8. 修改列表 4.9. 版本日志对话框 4.9.1. 调用版本日志对话框 4.9.2. 版本日志动作 4.9.3. 获得更多信息 4.9.4. 获取更...

    MxsDoc文件管理系统 v2.02.63

    文件管理系统、文档安全管理系统、分布式文档管理系统、协同办公系统、电子书、软件接口管理系统、自动备份软件、网页版SVN仓库、网页版GIT仓库、FTP客户端、SFTP客户端、SMB客户端、Linux系统远程文件访问。...

    subversion-TortoiseSVN-使用手册(CHM+HTML,中英完整版)

    4.2. 版本库备份 4.3. 钩子脚本 4.4. 检出链接 5. 日常使用指南 5.1. 开始 5.1.1. 图标重载 5.1.2. 右键菜单 5.1.3. 拖放 5.1.4. 常用快捷方式 5.1.5. 认证 5.2. 导入数据到版本库 5.2.1. 版本库布局 5.2.2. 导入 ...

    iuhyiuhkjh908u0980

    在windows系统中,命令行中执行ant命令时,当指定的 构建脚本文件中包含中文字符,而构建脚本文件的编码是UTF-8时将会 Invalid byte 1 of 1-byte UTF-8 sequence. 的错误.这个问题尚未 知解决,故先采用GBK的编码. 2.在...

    TortoiseSVN中文手册

    3.1.7. 使用 Windows 域认证 ......................................... 18 3.1.8. 多重认证源 ................................................... 20 3.1.9. 用 SSL 使服务器更安全 .............................

    TortoiseSVN中文教程

    4 锁定-修改-解锁 方案 ............................................................................................................... 5 复制-修改-合并 方案 ........................................

Global site tag (gtag.js) - Google Analytics