先说一下,现在很是兴奋,有一个难题被自己攻破。戴上耳机,听着音乐,很是舒服。
为了这个svn增量备份的脚本,反复测试了一个上午。从准备环境到最终试验成功,不断地在网上找资料,不断地尝试,每一次都是失败。
参考了网上很多的例子,几乎都是两个脚本完成svn的增量备份。网上的两个脚本的例子如下:
在hooks下建立一个文件post-commit.bat,内容如下:
set SVN_HOME="C:VisualSVNServer"
set SVN_ROOT=D:Repositories
set DELTA_BACKUP_SVN_ROOT=D:Repositoriesbak
set LOG_FILE=%1backup.log
echo backup revision %2 >>%LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if C:Repositories%%~nI == %1%SVN_ROOT%%%~nIhooksdeltabackup.bat %%~nI %2
goto end
:end
另一个bat文件:deltabackup.bat
@echo 正在备份版本库%2......
%SVN_HOME%binsvnadmin dump %SVN_ROOT%%1 --incremental --revision%2 >> D:Repositories
%1.dump
@echo 版本库%2成功备份到了%3!
他们的意思是使用post-commit.bat 调用deltabackup.bat批处理文件,经过我多次试验不通过。主要原因是post-commit.bat中的for循环部分始终不能执行,用日志调试了很多遍就是不执行。最后放弃这种方式,改为在一个文件中测试通过:
我的资源库的目录结构:
D:svnroot
│ authz
│ authz-windows
│ htpasswd
│ server.pid
│
├─project1
│ │ backup.log
│ │ format
│ │ README.txt
│ │
│ ├─conf
││authz
││passwd
││svnserve.conf
│ │
│ ├─dav
│ │ └─activities.d
│ ├─db
│ │ │current
│ │ │format
│ │ │fs-type
│ │ │fsfs.conf
│ │ │min-unpacked-rev
│ │ │rep-cache.db
│ │ │txn-current
│ │ │txn-current-lock
│ │ │uuid
│ │ │write-lock
│ │ │
│ │ ├─revprops
│ │ │└─0
│ ││0
│ ││1
│ ││10
│ ││2
│ ││3
│ ││4
│ ││5
│ ││6
│ ││7
│ ││8
│ ││9
│ │ │
│ │ ├─revs
│ │ │└─0
│ ││0
│ ││1
│ ││10
│ ││2
│ ││3
│ ││4
│ ││5
│ ││6
│ ││7
│ ││8
│ ││9
│ │ │
│ │ ├─transactions
│ │ └─txn-protorevs
│ ├─hooks
││post-commit.bat
││post-commit.rar
││post-commit.tmpl
││post-lock.tmpl
││post-revprop-change.tmpl
││post-unlock.tmpl
││pre-commit.tmpl
││pre-lock.tmpl
││pre-revprop-change.tmpl
││pre-unlock.tmpl
││start-commit.tmpl
│ │
│ └─locks
│db-logs.lock
│db.lock
│
└─project2
│ format
│ README.txt
│
├─conf
│authz
│passwd
│svnserve.conf
│
├─db
│ │ current
│ │ format
│ │ fs-type
│ │ fsfs.conf
│ │ min-unpacked-rev
│ │ txn-current
│ │ txn-current-lock
│ │ uuid
│ │ write-lock
│ │
│ ├─revprops
│ │ └─0
││0
│ │
│ ├─revs
│ │ └─0
││0
│ │
│ ├─transactions
│ └─txn-protorevs
├─hooks
│post-commit.tmpl
│post-lock.tmpl
│post-revprop-change.tmpl
│post-unlock.tmpl
│pre-commit.tmpl
│pre-lock.tmpl
│pre-revprop-change.tmpl
│pre-unlock.tmpl
│start-commit.tmpl
│
└─locks
db-logs.lock
db.lock
然后把写好的脚本post-commit.bat 放在project1的hooks下,对测试项目Project1进行版本库修改测试,经测试文件正常写入到D:svnrootbakdelta下的Project1.dump文件。测试成功的代码如下,供大家参考
@echo off
@echo svn服务器的安装地址
set SVN_HOME=E:Program FilesVisualSVN Server
@echo svn资源库根目录
set SVN_ROOT=D:svnroot
@echo svn需要备份到的目录 确保delta文件夹存在
set DELTA_BACKUP_SVN_ROOT=D:svnrootbakdelta
@echo svn增量备份的日志文件
set LOG_FILE=%1backup.log
echo backup revision %2 >>%LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if %SVN_ROOT%%%~nI == %1"%SVN_HOME%binsvnadmin" dump %1 --incremental --revision %2>>�LTA_BACKUP_SVN_ROOT%%%~nI.dump
goto end
:end