`

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备份方案,包括全量备份与增量备份。 #### 二、备份策略概述 **1. 定期大备份**:指定期对整个SVN仓库进行完全复制,确保在系统出现故障或数据丢失时能够快速...

    一段进行SVN备份的脚本

    这段描述提到的“一段进行SVN备份的脚本”就是为了解决这一需求,它允许用户通过Windows计划任务自动化执行备份过程,以防止意外数据丢失。 首先,我们需要理解SVN备份的基本原理。SVN仓库通常存储在服务器上,包含...

    windows下svn服务器环境搭建(subversion)

    VisualSVN Server提供了备份功能,也可以使用第三方工具进行更复杂的备份方案。如果发生问题,可以从备份中恢复仓库。 10. **监控和日志** 可以通过VisualSVN Server的监控和日志功能来跟踪服务器活动,了解谁在...

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

    增量备份是SVN备份策略的一种,它只备份自上次备份以来发生改变的数据,从而节省存储空间和备份时间。在这个"SVN增量备份脚本及MD5加密工具"中,包含了两个批处理脚本和一个MD5加密工具,旨在简化和增强SVN仓库的...

    svn代码库如何备份到本地

    本文主要介绍如何将运行在Linux系统上的SVN代码库备份到Windows系统上,并提供具体的操作步骤。 #### 步骤一:创建本地备份目录 首先,在Windows系统的指定位置创建一个用于存放备份的目录。例如,在本例中,我们将...

    svn_TortoiseSVN\Svn备份.doc

    ### Subversion(SVN)中的备份策略详解 在软件开发领域,源代码的管理和版本控制至关重要。...在实施这些备份方案时,自动化脚本和定时任务的使用极大地简化了操作复杂度,是现代软件开发实践中值得推荐的最佳实践。

    svn -windows插件

    在Windows环境下,为了方便用户与SVN服务器进行交互,通常会使用专门的客户端插件。本压缩包提供的“Slik-Subversion-1.8.10-x64.msi”是适用于64位Windows系统的 SVN 客户端插件。 **Slik Subversion 插件详解** ...

    windows_linux_svn_自动化全备份_增量备份_2.zip

    总结起来,这个资源包提供了一套解决方案,帮助用户在Windows和Linux环境下配置SVN的自动化全备份和增量备份,确保开发数据的安全性和可恢复性。对于任何使用SVN管理代码库的团队来说,理解并实施这样的备份策略都是...

    SVN自动备份

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。自动备份在SVN中至关重要,因为它可以保护数据免...请务必根据你的具体需求和环境调整这些方法,以构建最适合你的SVN备份解决方案。

    一键删除目录下SVN记录文件

    标签“一键删除SVN”进一步强调了用户寻求的是一种简便、快速的解决方案,以一次性处理整个目录下的SVN记录。 在提供的压缩包中有一个名为"Delete SVN Folders.reg"的文件,这很可能是一个注册表脚本,用于在...

    清除文件夹svn(windows右键工具)

    总的来说,"清除文件夹svn(windows右键工具)"是一个针对Windows用户的SVN清理解决方案,它简化了清理过程,使得SVN工作副本的维护变得更加简单。通过将功能整合到熟悉的操作环境中,它降低了学习曲线,让所有技术...

    TSvnPwd-svn查看本地账密信息程序(windows版本)

    总结起来,“TSvnPwd-svn查看本地账密信息程序(windows版本)”是一个实用工具,它解决了在Windows环境下SVN用户忘记密码的问题。通过运行TSvnPwd.exe,用户可以轻松获取被系统保存的SVN认证信息,有效地提高了工作...

    svn整体部署方案

    2. 权限配置:在 SVN 仓库的 conf 目录下,编辑 svnserve.conf(或 dav_svn.conf),设置用户和组的读写权限。 3. SSL 加密:为了数据安全,建议使用 SSL 证书为 SVN 连接提供加密。 五、客户端配置 1. 安装 SVN ...

    清楚svn目录下生成的.svn文件夹

    - **手动删除**:通过Windows资源管理器或者Linux的`rm`命令,逐个或批量删除目录下的`.svn`文件夹。但这需要小心操作,防止误删其他重要文件。 - **使用脚本**:提供名为“清楚当前目录下的.svn信息.bat”的...

    SVN项目文档管理方案1024.docx

    TortoiseSVN是SVN的一个图形化客户端,方便用户在Windows环境下操作。 在本文档中,详细介绍了如何使用SVN进行项目文档的管理和控制,主要涵盖了以下关键知识点: 1. **引言** - 版本控制是跟踪和管理项目中文件...

    Subversion库迁移及备份方案

    本文将详细介绍两种常用的SVN库迁移方案(采用dump-load方案与svnsync方案),以及一种备份方案,旨在为企业提供更加规范的操作指南。 #### 二、Subversion库迁移方案 ##### 2.1 dump-load方案 **背景介绍:** ...

    SVN等多种工具备份批处理文档

    首先,让我们关注SVN备份。SVN本身并不直接支持自动备份,但可以通过脚本或批处理文件实现。通常,这包括以下步骤: 1. 使用`svnadmin dump`命令创建SVN仓库的完整或增量备份。完整备份将获取仓库的全部内容,而...

    快速清理svn文件夹

    "快速清理svn文件夹"这一主题,就是针对这个问题提出的一种解决方案。 标题所指的"快速清理svn文件夹"是一种高效的方法,旨在帮助用户迅速清除不再需要的SVN相关文件,以释放磁盘空间,保持工作目录整洁。这通常...

    eclipse下切换svn用户

    ### Eclipse 下切换 SVN 用户的方法详解 #### 背景介绍 Eclipse 是一款非常流行的开源集成开发环境(IDE),广泛应用于 Java 开发领域。而 Subversion(SVN)作为版本控制系统之一,在软件开发过程中扮演着重要的...

Global site tag (gtag.js) - Google Analytics