VisualSVNServer完全攻略手册.docx
《VisualSVNServer完全攻略手册.docx》由会员分享,可在线阅读,更多相关《VisualSVNServer完全攻略手册.docx(14页珍藏版)》请在冰豆网上搜索。
![VisualSVNServer完全攻略手册.docx](https://file1.bdocx.com/fileroot1/2022-12/8/1985a3af-38d4-4258-9591-aede87615975/1985a3af-38d4-4258-9591-aede876159751.gif)
VisualSVNServer完全攻略手册
VisualSVN-Server-2.2.0
备份手册
目录
修订记录2
1.同步备所需要的命令4
1.1.Svnsyn4
1.2.目标4
1.3.过程4
1.4.初始化5
1.5.同步6
2.具体操作操作流程概括7
3.遇到的问题与解决方法8
4.Subversion同步工具svnsync出错8
5.使用svnsync备份很简单,步骤如下9
6.注意事项12
7.关于svnsync备份时出现的问题解析12
7.1.问题一12
7.1.1.问题描述12
7.1.2.解决方案12
7.2.问题二12
7.2.1.问题描述12
7.2.2.解决方案13
8.自动定时备份13
8.1.Repositories.bat的说明13
8.2.SVN.bat的说明14
8.3.定时执行计划14
8.3.1.执行步骤14
1.同步备所需要的命令
1.1.Svnsyn
下面介绍利用两个命令svnsync来同步版本库,达到备份版本库的目的要用到两个命令
1)svnsyncinit
初始化,建立目标库和源库之间的同步关系
命令格式:
svnsyncinit目标库URL源库URL
2)svnsyncsync
真正的同步
命令格式svnsyncsync目标库URL
1.2.目标
本次实现的是版本库的远程自动备份,将版本库备份到另一台机器上
假设我们要同步的源版本库为http:
//192.168.1.210/svn/svnprojec位于机器A,具体路径我们不必理会,因为我们使用http协议
目标库在机器B,file:
///F:
/Repositories/svnproject,这个为了简单和安全,我们使用file:
//协议
1.3.过程
1)创建pre-revprop-change.bat文件:
即复制pre-revprop-change.tmpl,将其扩展名改为pre-revprop-change.bat,并且清空原有的所有内容、保存。
如下图所示:
∙
2)修改目标库的脚本pre-revprop-change
进入F:
/svn/svnproject/hooks/
cd/svn/svnproject/hooks/
打开后末尾字段如下:
REPOS="$1"REV="$2"USER="$3"PROPNAME="$4"ACTION="$5"if["$ACTION"="M"-a"$PROPNAME"="svn:
log"];thenexit0;fiecho"Changingrevisionpropertiesotherthansvn:
logisprohibited">&2exit1,原脚本的意思是如果修改的是svn:
log属性,将允许修改,返回0;否则,不允许,返回1,我们要将它改为允许修改所有的属性,在脚本中直接返回0,新的脚本如下:
exit1exit0即可。
1.4.初始化
在机器B上输入命令:
在DOS命令的cdC:
\ProgramFiles\VisualSVNServer\bin根目录下输入:
svnsyncinitfile:
///F:
/Repositories/svnproject(有空格)http:
//192.168.1.210:
8081/svn/svnproject会提示输入用户名和密码,这里提供的用户名和密码是可以完全读取于
http:
//192.168.1.210:
8081/svn/svnproject的计算机密码,用户名和密码。
1.5.同步
1)svnsyncsyncfile:
///F:
/Repositories/svnproject
依然会提示输入用户名和密码,不过,你可以在这个命令之后加上username、password参数,在目录:
C:
\ProgramFiles\VisualSVNServer\bin下
输入:
svnsyncsyncfile:
///F:
/Repositories/svnproject--usernameusername--passwordpassword
如下图所示:
(Transmitting:
正在进行传送,传输) 如上截图所示,会一直走下去直至目标库与源库的版本号完全一致为止;
2)同步结束后,如下图所示:
到这一步时,SVN远程备份就已经完成了,如果版本库较大时,备份的时间可能会有点慢,要有耐心,用一天也是有可能的,你可以打开目标库看看,和源库是一样的。
注意:
应该定期的一周或者两周打开命令窗口输入:
svnsyncsyncfile:
///F:
/Repositories/svnproject
已达到定期同步的目的。
2.具体操作操作流程概括
∙1、在要备份的机器上建立版本库:
svnadmincreatesvn
∙2、进入hooks目录:
cdsvn/svnproject/hooks/
∙3、创建pre-revprop-change.bat文件:
复制pre-revprop-change.tmpl,将扩展名改为pre-revprop-change.bat,并且清空原有的所有内容,保存。
∙4、修改文件:
pre-revprop-change文件,
为echo“Changingrevisionpropertiesotherthansvn:
logisprohibited”>&2
exit0(1修改为0即可)
∙6、同步初步:
svnsyncinitfile:
///F:
/Repositories/svnprojecthttp:
//192.168.2.235:
8081/svn/svnproject
svnsync:
Destinationrepositoryisalreadysynchronizingfrom’svn:
//10.10.10.1′
∙7、实现同步:
svnsyncsyncfile:
///F:
/Repositories/svnproject–usernameusername–passwordpassword1
3.遇到的问题与解决方法
Svnsync:
Cannotinitialize(初始化)arepositorywithcontentinit
:
当版本库有内容时不能初始化
如果反复操作都是同样错误的话,很可能是你版本库有内容,需要你版本库svn,重新按照svn服务器的安装手册里SVN与apache的集成来重新新建版本库。
4.Subversion同步工具svnsync出错
在使用svnsync同步两个版本库时经常出现如下的错误,并自动中断了同步操作:
Copiedpropertiesforrevision461.
svnsync:
Serversentunexpectedreturnvalue(502BadGateway)inresponsetoPR
OPFINDrequestfor‘/svn/!
svn/vcc/default’
当再次运行svnsyncsyncfile:
///F:
/Repositories/svnproject时,有可能出现“Failedtogetlockondestinationrepos”的错误信息,使同步操作无法继续进行:
F:
\Subversion>svnsyncsyncfile:
///F:
/Repositories/svnproject
Failedtogetlockondestinationrepos,currentlyheldby‘firehack:
963c0909-45ad-644f-b383-7e35d445028f’
……
Failedtogetlockondestinationrepos,currentlyheldby
‘firehack:
963c0909-45ad-644f-b383-7e35d445028f’
svnsync:
Couldn’tgetlockondestinationreposafter10attempts
解决办法:
删除SVN仓库修订号0 svn:
sync-lock的保护.
svnpropdelsvn:
sync-lock--revprop-r0file:
///F:
/Repositories/svnproject
5.使用svnsync备份很简单,步骤如下
一、在备份机上创建一个空库:
svnadmin create svn
二、更改该库的钩子脚本pre-revprop-change(因为svnsync要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本):
cd F:
/svn/svnproject/hooks;
cp pre-revprop-change.tmpl pre-revprop-change;
chmod 755 pre-revprop-change;
vi pre-revprop-change;
将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。
三、初始化,此时还没有备份任何数据:
svnsync init file:
///F:
/Repositories/svnproject http:
//192.168.1.210:
8081/svn/svnproject
语法是:
svnsync init {你刚创建的库url} {源库url}
注意本地url是三个斜杠的:
///
四、开始备份:
svnsync sync file:
///F:
/svn/svnproject
这时就一个个版本进行备份了。
附录:
可能的报错一:
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by ':
0c424c20-2e3b-0410-bd34-7fdd53c25d02'
svnsync:
Couldn't get lock on destination repos after 10 attempts
这个时候可能属性被锁了,删掉属性:
svn propdel svn:
sync-lock --revprop -r0 file:
///F:
/Repositories/svnproject
如下截图所示:
删除成功后,再试一遍基本就可以了。
如果反复操作都是同样错误的话,有可能是你的svn安装有问题,重新安装一遍就好了,我试过的。
可能报错二、
svnsync:
REPORT request failed on 'http:
//192.168.1.210:
8081/svn/svnproject'
svnsync:
The requested report is unknown.
这是因为svn源库的版本太低了,svnsync所需要的函数Report是svn1.4后加入的,只能对你的库进行升级后才能备份。
svnproplist-v--revprop-r0
svnproplist-v--revprop-r0svnsyncsyncfile:
///F:
/Repositories/svnproject
6.注意事项
据本人总结,上述方式的备份,需要注意的是:
1)在备份服务器上不能进行任意操作,只能打开,不能增删改动!
2)要定期备份;
Dos命令输入:
Svnlookauthor–r5387F:
/svn/svnproject会显示作者。
7.关于svnsync备份时出现的问题解析
7.1.问题一
问题描述
使用svnsync进行备份的过程中突然断了下电,再次启动后进行备份时就出现这“svnsync:
Malformedfile”提示。
解决方案
svnsync:
Malformedfile意思是文件格式损坏,svnsync无法判断目标是否有效的svn库。
解决办法可以试一下:
将svn库下面的几个文件拷贝过去覆盖掉;或者是重新进行svnsync初始化。
7.2.问题二
问题描述
在初始化过程中再运行初始化的时候出现如下的错误是什么原因呢?
:
D:
\ProgramFiles\Subversion\bin>svnsyncinitfile:
///e:
/svn/Huigu-JXZHXhttp:
//1
92.168.1.164/svn/Huigu-JXZHX
svnsync:
钩子“pre-revprop-change”失败,错误输出是:
'REPOS'不是内部或外部命令,也不是可运行的程序
或批处理文件。
'REV'不是内部或外部命令,也不是可运行的程序
或批处理文件。
'PROPNAME'不是内部或外部命令,也不是可运行的程序
或批处理文件。
'ACTION'不是内部或外部命令,也不是可运行的程序
或批处理文件。
此时不应有"$ACTION",
解决方案
用户应该只是把原来文件中的最后一行“exit1 ”替换成了“exit0”所以就出问题了,正确的是把原来整个文件就剩下“exit0” 。
补充:
Linux下还需设置脚本文件pre-revprop-change的属性为可执行,即:
chmod +x pre-revprop-change
Windows下所有文件默认即为可执行,不用设置。
另外:
在Linux下脚本的第一行应保留 #!
/bin/sh
8.自动定时备份
脚本:
8.1.Repositories.bat的说明
1.在Repositories.bat中的首先进入VisualSVN-Server-2.1.5
的安装根目录下:
@echooff
callD:
callcdD:
\ProgramFiles\subversion-1.4.2\Subversion\bin\,
2.然后执行备份命令:
“callsvnsyncsyncfile:
///E:
/svn/svnproject”
8.2.SVN.bat的说明
1.在SVN.bat中首先进入
+
集成后的安装根目录:
@echooff
callD:
callcdD:
\ProgramFiles\subversion-1.4.2\Subversion\bin\
2.然后再执行备份命令:
callsvnsyncsyncfile:
///E:
/svn/svnproject
8.3.定时执行计划
执行步骤
1.设置控制面板任务计划添加任务计划
2.第一步:
3.第二步:
4.第三步:
5.第四步:
6.第五步,这里需要输入本地机器的密码:
7.第六步:
8.第七步:
9.第八步,这里点击【应用】,需要输入本地机器密码:
10.第十步:
11.完成。