SVN远程备份简单操作手册.docx
《SVN远程备份简单操作手册.docx》由会员分享,可在线阅读,更多相关《SVN远程备份简单操作手册.docx(17页珍藏版)》请在冰点文库上搜索。
SVN远程备份简单操作手册
远程备份简单操作
>
版本:
1.0
发布日期:
2010-11-2
实施日期:
2010-11-9
修订记录
日期
版次
描述
作者
审核
批准
2010-11-2
1.0
初版发布,针对服务器版本1.4.2。
SUN
2010-11-18
1.1
添加了注意事项
SUN
目录
修订记录2
1建立版本库4
2Apache方式下添加用户5
3Apache方式下分组权限管理7
4同步备所需要的命令9
5具体操作操作流程概括:
13
6遇到的问题与解决方法:
14
7Subversion同步工具svnsync出错:
Failedtogetlockondestinationrepos14
8使用svnsync备份很简单,步骤如下:
15
9注意事项:
18
1建立版本库
1、在Dos命令行方式下,进入svn安装目录下的bin目录(如C:
\ProgramFiles\Subversion\bin)下,输入命令svnadmincreate路径+版本库名,即:
SvnadmincreateF:
/svn
Enter键后会自动创建svn文件夹,如下图所示:
2、进入C:
\ProgramFiles\ApacheGroup\Apache2\bin目录下(仍然在Dos命令行方式下),输入svnadmincreateF:
/svn/svnproject
3、在Apache安装目录下的conf目录下,用文本编辑器打开httpd.conf,在httpd.conf文件的最后语句中加入:
davsvn
svnparentpathF:
\svn
如下截图所示:
httpd.conf有黑色的雪花(*)表示此文件正在被修改,提醒每次修改后要记得保存,
这样,凡是在F盘下F:
\svn目录下的子目录,Apache都交给Subversion
4)将httpd.conf中的Listen80修改为Listen8081(须在规定的范围内可以任意改变端口号)。
改为:
版本库建好就要与Apache发生联系了。
2Apache方式下添加用户
1、首先,我们来为SVN配置库创建第一个用户zfq,在命令行窗口中转到Apachehtpasswd工具所在的目录(如:
C:
\ProgramFiles\ApacheGroup\Apache2\bin)下输入如下命令:
Htpasswd-cF:
\svn\svnproject\conf\userzfq
这时,会提示输入用户密码以及确认用户密码。
注意这里是创建第一个用户,所以需要有-c开关。
一定要注意:
创建第二个用户时,我们就不必输入-c开关了。
如果想要删除某个用户,我们可以使用下列指令:
Htpasswd–dF:
\svn\svnproject\conf\userharry
2、再在配置文件httpd.conf的最后加入下面的指令以增加权限:
davsvn
svnparentpathF:
\svn
#howtoauthenticateauser
authtypebasic
authname"Resources"
authuserfileF:
\svn\svnproject\conf\user
#onlyauthenticatedusersmayaccesstherepository
Requirevalid-user
如截图所示:
3Apache方式下分组权限管理
1、有时,我们希望能够将多个开发人员编为一组,使用组的方式来为
项目设定权限。
比如projectA项目只有属于groupA的成员才可以存取
2、我们对httpd.conf中的目录配置再做一次修改:
davsvn
svnparentpathF:
\svn
authtypebasic
authname"Resources"
authuserfileF:
\svn\svnproject\conf\user
authzsvnaccessfileF:
\svn\svnproject\conf\authz
Requirevalid-user
如下截图所示:
注意:
每次修改httpd.conf文件之后,记得保存,并且必须重新启动Apache服务器之后才能生效。
3、可以注意到,这里在F:
\svn\svnproject\conf目录下使用了另一个配置文件authz.conf
具体操作步骤如下:
1)初始时,先分配一个管理员,其对整个配置库具有读写权限,如:
[groups]
admin=sunfurong,zfq
[svnproject:
/]
@admin=rw
*=r
2)如下操作:
3)单击【确定】后,如下图所示:
4)输入相应的用户名和密码后,单击【确定】后,会出现一个空的配置库(这个很重要,必须是空的配置库才能保证以下操作的顺利进行。
)
4同步备所需要的命令
1、下面介绍利用svnsync来同步版本库,达到备份版本库的目的
要用到两个命令
1)svnsyncinit
初始化,建立目标库和源库之间的同步关系
命令格式:
svnsyncinit目标库URL源库URL
2)svnsyncsync
真正的同步
命令格式svnsyncsync目标库URL
2、目标:
本次实现的是版本库的远程自动备份,将版本库备份到另一台机器上
假设我们要同步的源版本库为http:
//192.168.2.235/svn/svnprojec位于机器A,具体路径我们不必理会,因为我们使用http协议
目标库在机器B,file:
///svn/svnproject,这个为了简单和安全,我们使用file:
//协议
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即可。
4、初始化
在机器B上输入命令:
svnsyncinitfile:
///F:
/svn/svnproject(有空格)http:
//192.168.2.235:
8081/svn/svnproject会提示输入用户名和密码,这里提供的用户名和密码是可以完全读取于
http:
//192.168.2.235:
8081/svn/svnproject的计算机密码,用户名和密码,,即如下图:
5、同步
1)svnsyncsyncfile:
///F:
/svn/svnproject
依然会提示输入用户名和密码,不过,你可以在这个命令之后加上username、password参数,在目录:
C:
\ProgramFiles\Subversion\bin下
输入:
svnsyncsyncfile:
///F:
/svn/svnproject--usernameusername--passwordpassword
如下图所示:
如上截图所示,会一直走下去直至目标库与源库的版本号完全一致为止。
2)同步结束后,如下图所示:
到这一步时,SVN远程备份就已经完成了,如果版本库较大时,备份的时间可能会有点慢,要有耐心,用一天也是有可能的,你可以打开目标库看看,和源库是一样的。
注意:
应该定期的一周或者两周打开命令窗口输入:
svnsyncsyncfile:
///F:
/svn/svnproject
已达到定期同步的目的。
5具体操作操作流程概括:
∙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:
/svn/svnprojecthttp:
//192.168.2.235:
8081/svn/svnproject
svnsync:
Destinationrepositoryisalreadysynchronizingfrom’svn:
//10.10.10.1′
∙7、实现同步:
svnsyncsyncfile:
///F:
/svn/svnproject–usernameusername–passwordpassword1
6遇到的问题与解决方法:
Svnsync:
Cannotinitialize(初始化)arepositorywithcontentinit
:
当版本库有内容时不能初始化
如果反复操作都是同样错误的话,很可能是你版本库有内容,需要你版本库svn,重新按照svn服务器的安装手册里SVN与apache的集成来重新新建版本库。
7同步工具svnsync出错
常见问题一:
在使用svnsync同步两个版本库时经常出现如下的错误,并自动中断了同步操作:
Copiedpropertiesforrevision461.
svnsync:
Serversentunexpectedreturnvalue(502BadGateway)inresponsetoPR
OPFINDrequestfor‘/svn/!
svn/vcc/default’
当再次运行svnsyncsyncfile:
///F:
/svn/svnproject时,有可能出现“Failedtogetlockondestinationrepos”的错误信息,使同步操作无法继续进行:
F:
\Subversion>svnsyncsyncfile:
///F:
/svn/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:
/svn/svnproject
常见问题二:
一个意外情况:
我在测试中,发现如下错误
Copiedpropertiesforrevision738.
Committedrevision739.
Copiedpropertiesforrevision739.
Committedrevision740.
Copiedpropertiesforrevision740.
Committedrevision741.
Copiedpropertiesforrevision741.
svnsync:
REPORT请求“http:
//192.168.1.210:
8081/svn/svnproject”失败
svnsync:
REPORT的结果”http:
//192.168.1.210:
8081/svn/svnproject”:
200OK(http:
//192.168.1.210:
8081/svn/svnproject)
解决办法:
打开备份的配置库,将其中空的文件夹进行删除或是新建,对最后的版本进行覆盖即可。
产生原因:
是对某个操作的无法识别导致,需要知道的是与Apache集成的配置库是不支持中文格式,包括空白字符、空格,所以配置库极为脆弱,需要好好维护,到后面SVN虽然有升级,但是这个Bug仍然存在,也许到后面的学习中,我会有办法彻底解决。
8使用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:
/svn/svnproject http:
//192.168.2.235:
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:
/svn/svnproject
如下截图所示:
删除成功后,再试一遍基本就可以了。
如果反复操作都是同样错误的话,有可能是你的svn安装有问题,重新安装一遍就好了,我试过的。
可能报错二、svnsync:
REPORT request failed on 'http:
//192.168.2.235:
8081/svn/svnproject'
svnsync:
The requested report is unknown.
这是因为svn源库的版本太低了,svnsync所需要的函数Report是svn1.4后加入的,只能对你的库进行升级后才能备份。
svnproplist-v--revprop-r0
svnproplist-v--revprop-r0svnsyncsyncfile:
///F:
/svn/svnproject
9注意事项:
1.据本人总结,上述方式的备份,需要注意的是:
1)在备份服务器上不能进行任意操作,只能打开,不能增删改动!
2)要定期备份;