SVN版本库的备份、还原、移植(初级篇、中级篇和高级篇)

初级篇:

 

       版本库数据的移植:svnadmin dumpsvnadmin load

导出:

$svnlook youngest myrepos //查看到目前为止最新的版本号

$svnadmin dump myrepos > dumpfile //将指定的版本库导出成文件dumpfile

导入:

$svnadmin load newrepos < dumpfile

 

中级篇:

$svnadmin dump myrepos –r 23 >rev-23.dumpfile           //version23导出

$svnadmin dump myrepos –r 100:200 >rev-100-200.dumpfile  //version100~200导出

对比较大的库可以分解成几个文件导出,便于备份

$svnadmin dump myrepos –r 0:1000 >0-1000.dumpfile

$svnadmin dump myrepos –r 1001:2000 --incremental >1001-2000.dumpfile

$svnadmin dump myrepos –r 2001:3000 --incremental >2001:3000.dumpfile

在导入时,可以将这几个备份文件装载到一个新的版本库中

$svnadmin load myrepos < 0-1000.dumpfile

$svnadmin load myrepos < 1001-2000.dumpfile

$svnadmin load myrepos < 2001:3000.dumpfile

  

  

高级篇:

    过滤版本库历史:

       假设有三个项目的版本库

       /RigTMS

       /DocProtect

       /Odin

       现需要将这三个项目转移到独立的三个版本库中,需要做如下操作

       1、转储整个版本库

       $svnadmin dump /path/to/repos > repos-dumpfile

       2、将转储文件三次过滤,每次仅保留一个定级目录,即可以得到三个转储文件

       $svndumpfilter include RigTMS < repos-dumpfile > RigTMS-dumpfile

$svndumpfilter include DocProtect < repos-dumpfile > DocProtect-dumpfile

$svndumpfilter include Odin < repos-dumpfile >Odin-dumpfile

       3、虽然现在的RigTMSDocProtectOdin都可以用来创建一个可用的版本库,但他们保留了原版本库的精确路径结构(例如: RigTMS的顶级目录为/RigTMS/trunk/RigTMS/branches/RigTMS/tags而非我们所需要的/trunk/branches/tags),如果要实现目标,需要编辑转储文件,调整Node-pathCopyfrom-path头参数,将路径/RigTMS删除,同时还要转储数据中创建RigTMS目录的部分。

       Node-pathRigTMS

       Node-actionadd

       Node-kinddir

       Content-length0

*****特别注意点:如果使用手工编辑dumpfile文件来移除一个顶级目录,需要注意不要让使用的编辑器将换行符转换为本地格式(比如将\r\n转换为\n),否则文件的内容就与原来的格式不符,这个转储文件就失效了。具体做法就是当你在使用编辑器打开文件的时候,编辑器会提示用户是否需要转换格式,一定要选择“否”,切记!!切记!!

       4、接下来就是创建三个新的版本库,然后将新过滤出来并修改好的三个转储文件导入

       $svnadmin create RigTMS;svnadmin load RigTMS < RigTMS-dumpfile

       $svnadmin create DocProtect;svnadmin load DocProtect < DocProtect-dumpfile

       $svnadmin create Odin;svnadmin load Odin < Odin -dumpfile

 

 

****备份环境注意点:

       1、确保没有其他进程访问版本库,关闭apachesvnserve服务

       2、成为版本库的管理员,如果以其他身份还原版本库,可能会改变版本库文件的访问权限,导致在恢复后依旧无法访问

       3svnadmin recover /path/to/repos

       4、重新启动服务进程

 

 

************************************

pre-revprop-change.bat

 

set repos=%1

set rev=%2

set user=%3

set propname=%4

set action=%5

for /f??"usebackq"? ?%%k in? ?(`svnlook author %repos% -r %rev%`)? ?do? ?@set??var=%%k

set rightUser=0

if "%3" == "%superUser%"??set rightUser=1

if "%3" == "%var%" set rightUser=1

if %rightUser% == 0 goto ERROR_USER

goto :SUCCESS_EXIT

:ERROR_USER

echo 只允许用户修改自己的日志 >&2

goto ERROR_EXIT

:ERROR_EXIT

exit 1

:SUCCESS_EXIT

exit 0

 

 

************************************

pre-commit.bat

setlocal

set REPOS=%1

set TXN=%2

rem check that logmessage contains at least 5 characters

svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul

if %errorlevel% gtr 0 goto err

exit 0

:err

echo 提交必须写日志!>&2

exit 1

 

************************************

你可能感兴趣的:(SVN版本库的备份、还原、移植(初级篇、中级篇和高级篇))