截止到目前为止,手上的项目都纳入SVN进行管理,随着而来的问题是:如何为SVN版本库实现自动备份。我手上用的是VisualSVN工具来代替SVN服务端,但VisualSVN没有提供备份工具,没办法只好自己写一个,再写这个脚本的时候,我参考了SCMLife论坛上某位朋友的脚本文件,并稍做修改,现在贡献出来!
一、前提条件:
- 你的机器上装有VisualSVN,如果没有,也没有关系,只要确保Subversion的安装目录下可以找到svnadmin这个命令即可。因为版本库的备份就是利用这个程序来实现;
- 你的机器上要有7zip的命令行程序7z.exe,如果没有,请去7zip官方网站下载,因为我们要用到这个程序来实现对备份后的版本库进行压缩保存;
- 知道你的版本库所在目录;
- 备份脚本分为两个批处理文件,它们分别是:backup.bat与simpleBackup.bat。需要记住得是:simpleBackup.bat文件要放在版本库所在的目录下;而backup.bat可以任意放置。我们调用的是backup.bat;
- 每次备份成功后,会在版本库所在目录下的backup.log文件中记录;
echo off
rem Subversion的安装目录
set SVN_HOME="C:\Program Files\VisualSVN Server"
rem 所有版本库的父目录
set SVN_ROOT=E:\Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=E:\bak
rem 创建存放版本库的临时目录
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%
if exist %BACKUP_DIRECTORY% goto checkBack
echo %date:~0,4%%date:~5,2%%date:~8,2% : 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
rem 创建备份目录
md %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" call %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI
echo 开始压缩版本库,请不要中止....
%SVN_ROOT%\7z.exe a -tzip %BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%.zip %BACKUP_DIRECTORY%\* -r >nul
echo 版本库压缩完成!
rem 清除临时创建备份目录
rd/s/q %BACKUP_DIRECTORY%
goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end
SimpleBackup.bat 源码@echo 正在备份版本库%1......@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!
PS:在编写批处理文件时,我试图创建一个变量,该变量用于保存当前日期,但是不知为何总是不能成功,相关代码如下:
echo off
set filename = %date:~0,4%%date:~5,2%%date:~8,2%
echo 文件名:%filename%
按道理来说,这三句话,没有错误啊,为什么却无法输出变量filename的值,郁闷!
请知道朋友帮忙看一看!