SVN服务端的配置
Posted syd_programming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN服务端的配置相关的知识,希望对你有一定的参考价值。
1. 安装服务端
安装subversion,我选择的是svn-1.4.1-setup.exe进行安装,安装到
D:/Subversion 。
2. 创建SVN存储库(repository)
也就是建立版本库,我建立的是多库,先在D盘建立一个文件夹SVNROOT,然后在这个文件夹里建立版本库,我首先创建一个版本库的名称为:工作文档
建立版本库的方法:输入DOS命令:
svnadmin create D:/SVN/工作文档
repository创 建完毕后会在目录下生成若干个文件和文件夹,dav目录是提供给Apache与mod_dav_svn使用的目录,让它们存储内部数据;db目录就是所有 版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客 户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
3. 配置SVN服务器
配置服务器的地方就是你所建立版本库的地方F:/SVNROOT/工作文档。
打开/conf/目录,打开svnserve.conf找到下面的句子:
[general]
# password-db = passwd
# anon-access = none
# auth-access = write
# authz-db = authz
# realm = My First Repository
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件.anon-access = none 是匿名用户不能访问,必须要有用户名和密码。(注意:问题就出在这,一定要注意格式去掉注释后要顶格不能有空)
同样打开passwd文件,将
# harry = harryssecret
# sally = sallyssecret
格式为“用户名 = 密码”,如可插入一行:mm = mm,即为系统添加一个用户名为mm,密码为mm的用户.(注意顶格写不要有空隙)。
4. 运行SVN服务器
单库下运行服务器的方式:
SVN服务器的执行如下命令:
svnserve --daemon --root D:/SVN/工作文档(此时svnserve只能为一个版本库工作)
可以简写为:svnserve -d –r D:/SVN/工作文档
(注意:这是临时打开的服务,命令执行后不能关闭窗口)
用后台服务的方式可以设置开机自动执行,执行语句为:
D:/ Subversion/bin>sc create svnservice binpath= "d:/ Subversion/bin/svnserve.exe --service –r D:/SVN/工作文档
就可以用net svnservice stop 或者start来启动服务了 也可以在Sevices.msc来启动了。
多库下运行服务器的方式:
SVN服务器的执行如下命令:
svnserve –d –r D:/SVN
(此时svnserve可以为多个版本库工作)
用后台服务的方式可以设置开机自动执行,执行语句为:
sc create SVNService binpath= "D:/Subversion/bin/svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto
5. 用户客户端访问 用户访问的地址可以写成:svn://IP地址/版本库名称
SVN服务端权限的制定
多库下设置权限:
jsm是工作文档的管理者,对工作文档有完全权限
wrl对工作文档的公司CMMI建设有完全的权限,但对其中的/培训试题/试题 目录没有任何的权限
sb对工作文档的公司CMMI建设有完全的读权限,但对其中的/培训试题/试题 目录没有任何的权限
对应的组及组的用户:
group_CMMI:jsm
group_wjjc:wrl
group_xczh:sb
配置授权:
[groups]
group_CMMI = jsm
group_wjjc = wrl
group_xczh = sb
[/]
* = r
[工作文档:/]
@group_CMMI = rw
@group_wjjc = rw
@group_xczh = r
[工作文档:/培训试题/试题]
@group_CMMI = rw
@group_wjjc =
@group_xczh =
关 于中文目录,也是没有问题的,只是注意要把authz文件转化为UTF-8无BOM格式,在我的WINXP的UltraEdit里显示的文件格式为U8- DOS,具体的做法是用UltraEdit打开authz文件,然后选择“文件->转换->ASCII转UTF-8”,然后保存。
利用UltraEdit我们可以将BOM去掉。方法是:首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可
SVN 备份
备份共分为三种:一个是:完全备份,增量备份,同步版本库
1. 完全备份
(1)利用语句实现备份
例如把d:/SVN中的版本库 xuexi 备份到 d:/SVNBAK 的目录下,只需要在DOS 的环境下运行:
Svnadmin hotcopy d:/SVN/xuexi d:/SVNBAK/xuexi
本次的操作成功的把版本库备份了。可是此操作只是把一个根目录下的一个版本库备份了,所以这样操作会很繁琐的。
(2)利用脚本完成的完全备份,这种备份可以实现一个根目录下的所有版本库的备份。
此时要在D:/SVN下创建2个文件。
一个文件是simpleBackup.bat :
@echo 正在备份版本库%1......
@%SVN_HOME%/bin/svnadmin hotcopy %1 %BACKUP_DIRECTORY%/%2
@echo 版本库%1成功备份到了%2!
一个文件是 backup.bat
echo off
rem Subversion的安装目录
set SVN_HOME="D:/Subversion"
rem 所有版本库的父目录
set SVN_ROOT=D:/SVN
rem 备份的目录
set BACKUP_SVN_ROOT=D:/SVNBAK
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%/%date:~0,10%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" % SVN_ROOT%/simpleBackup.bat "%%~fI" %%~nI
goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end
把 这两个文件放到D:/SVN 中后,可以直接运行backup.bat ,然后会发现在SVNBAK 文件夹中出现了备份的文件夹2008-02-19 ,这样D:/SVN 目录下的所有的版本库就都备份到了D:/SVNBAK/2008-02-19中,这项利用脚本的操作可以直接的把一个根目录中的所有的版本库备份了。
为了不遗忘备份,我们需要把备份的操作加入到系统的at当中去,运行:
at 12:35 /everyday D:/SVN/backup.bat
2.增量备份
首先是需要在 学习 的hooks目录下建立2个文件。一个文件是:post-commit.bat:
echo off
set SVN_HOME="D:/Subversion"
set SVN_ROOT=D:/SVN
set UNIX_SVN_ROOT=D:/SVNBAK
set DELTA_BACKUP_SVN_ROOT=D:/SVNBAK/delta
set LOG_FILE=%1/backup.log
echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2
goto end
:end
一个文件是 deltaBackup.bat:
@echo 正在备份版本库%2......
%SVN_HOME%/bin/svnadmin dump %SVN_ROOT%/%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%/%1.dump
@echo 版本库%2成功备份到了%3!
通过post-commit.bat这个脚本,可以实现D:/SVN下的版本库提交时自动增量备份到D:/SVNBAK/delta(确定这个目录存在)。把这两个目录直接考到 xuexi 下面就可以直接实现xuexi 的自动备份。
3.版本库同步
Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。
3.1. 对目标库初始化
svnsync init svn://localhost/project2 svn://localhost/project1
其中project2是目标的版本库,而project1是源版本库。其中的目标版本库必须为空,而且必须允许修订版本属性的修改,也就是在目标的版本库的hooks目录里添加一个文件pre-revprop-change.bat,内容为空即可。
3.2. 同步project2到project1
svnsync sync svn://localhost/project2
这 时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候 project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果 目标版本库发生了变更,则无法继续同步了。
3.3. 同步历史属性的修改
因为同步不会更新对历史属性的修改,所以svnsync还有子命令copy-revprops,可以同步某个版本的属性。
3.4. 钩子自动同步
希望在每次提交时同步,则需要在源版本库增加post-commit脚本,内容如下:
echo off
set SVN_HOME="D:/Subversion"
%SVN_HOME%/bin/svnsync sync --non-interactive svn://localhost/project2
把以上内容存放为post-commit.bat,然后放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步。
4。SVN备份的脚本
我所有的目录在d:/SVN上,我的备份的目录是 d:/svn_bak
第一个文件是调度脚本 svndump.bat:
@echo off
@echo ================================================
@echo 说明:启动备份时,需要配置两个环境变量
@echo 1、SVN_HOME 指定svn的安装目录
@echo 2、RAR_CMD 指定RAR命令行压缩工具所在目录
@echo 3、SVN_REPOROOT 指定项目库的根目录(多库模式)
@echo 另外,如果需要异地备份,可以指定为网络映射Z盘
@echo ================================================
rem set logfile=svn_bak.log
set SVN_HOME=D:/Subversion/bin
set SVN_ADMIN="%SVN_HOME%/svnadmin.exe"
set SVN_LOOK="%SVN_HOME%/svnlook.exe"
set SVN_REPOROOT=d:/SVN
set RAR_CMD="C:/Program Files/WinRAR/Rar.exe"
rem if not exist z:/nul net use z: //192.168.2.226/g$/svndump
rem 读取项目库列表文件,并忽略其中;开头的行:victory:
FOR /f "eol=;" %%C IN (projectlist.conf) DO @call dump.bat %%C
第二个文件是备份脚本 dump.bat :
@ECHO OFF
rem 调用格式:dump 项目库名
if "%1"=="" goto no_args
set PROJECT=%1
if not exist %PROJECT% mkdir %PROJECT%
cd %PROJECT%
SET LOWER=0
SET UPPER=0
@FOR /f %%D IN ('%SVN_LOOK% youngest %SVN_REPOROOT%/%PROJECT%') DO set UPPER=%%D
if %UPPER%==0 GOTO :N_EXIT
if not exist %PROJECT%_last_revision.txt GOTO :BAKUP
rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
@FOR /f %%C IN (%PROJECT%_last_revision.txt) DO @set LOWER=%%C
@set /a LOWER=%LOWER%+1
rem 不需要备份,则跳转结束
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
:BAKUP
SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
%SVN_ADMIN% dump %SVN_REPOROOT%/%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp
%RAR_CMD% a -df %PROJECT%_%UPPER%.rar %FILENAME%.dmp
rem 准备写备份日志信息
IF %LOWER% gtr 0 GOTO :WRITENOTE
if not exist %PROJECT%_log.txt @copy ../log.conf %PROJECT%_log.txt
@ECHO %date% >> %PROJECT%_log.txt
@echo -- 添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt
GOTO :COMPLETE
:WRITENOTE
@ECHO %date% >> %PROJECT%_log.txt
@echo -- 添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt
:COMPLETE
rem 下面一行用于拷贝备份文件到映射的驱动器上
rem copy %PROJECT%.rar z:/%PROJECT%/
@echo %UPPER% > %PROJECT%_last_revision.txt
:N_EXIT
@echo 项目库%PROJECT%处理结束...
@CD..
@exit /B
:no_args
@ECHO ON
@echo "正确调用方法: dump 项目库名"
第3个文件是项目库列表projectlist.conf需要备份的清单,每个项目一行
学习
Xuexi
学习备份
第4个文件是日志模版脚本log.conf :
备份日志:
在备份的文件夹中加上这四个文件,然后运行svndump.bat ,就会出现:学习,
Xuexi,学习备份,这3个版本库的备份文档,里面有下图所示的文件。
以上是关于SVN服务端的配置的主要内容,如果未能解决你的问题,请参考以下文章