SVN服务端的配置

来源:互联网 发布:2004年nba总决赛数据 编辑:程序博客网 时间:2024/05/12 14:43

1.安装服务端


Ewqr[i5J0安装subversion,我选择的是svn-1.4.1-setup.exe进行安装,安装到 我用Subversion E LZm%/(K Qf
D:/Subversion 。
zW%b2]X!fk02.创建SVN存储库(repository) 我用SubversionJ2m7UH�t#w
也就是建立版本库,我建立的是多库,先在D盘建立一个文件夹SVNROOT,然后在这个文件夹里建立版本库,我首先创建一个版本库的名称为:工作文档
,i]l2]`a�e+`b-z(G0建立版本库的方法:输入DOS命令:
0UC?GI,cI[0svnadmin create D:/SVN/工作文档 我用Subversion1G1de#T%W8G'z
repository创建完毕后会在目录下生成若干个文件和文件夹,dav目录是提供给Apache与mod_dav_svn使用的目录,让它们存储内部数据;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。 我用Subversion q+T!K$/},F:]7F
3.配置SVN服务器
KJUa"hwQ0配置服务器的地方就是你所建立版本库的地方F:/SVNROOT/工作文档。
3? ]fB9ijDN0打开/conf/目录,打开svnserve.conf找到下面的句子: 我用Subversion/yt*k"v,A&{|
[general]
DB6F u(`8L/|0# password-db = passwd
t{p0w:q0b9Qqz3p0# anon-access = none  
{G.mtJ"nWo2L6T0# auth-access = write  
r/a5}}5NPl0# authz-db = authz 我用Subversiona'y kFP0k
# realm = My First Repository 我用SubversionDsO^o9i
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件.anon-access = none 是匿名用户不能访问,必须要有用户名和密码。(注意:问题就出在这,一定要注意格式去掉注释后要顶格不能有空)
2ZS8ZyXAq0同样打开passwd文件,将 我用Subversion-l o|"}c3r4GZ;`
我用Subversion?)i@iP*e
# harry = harryssecret
H.sK2E/Q0# sally = sallyssecret 我用SubversionwFY/nC
格式为“用户名 = 密码”,如可插入一行:mm = mm,即为系统添加一个用户名为mm,密码为mm的用户.(注意顶格写不要有空隙)。
~wxNq9aq�T04.运行SVN服务器
D7t |0}&EA&b`"^0单库下运行服务器的方式: 我用Subversionz)K GOT(e0C
SVN服务器的执行如下命令: 我用Subversion2|'GAMc7Nq!h&M:@
svnserve --daemon --root D:/SVN/工作文档(此时svnserve只能为一个版本库工作)
S^%i8Md?0可以简写为:svnserve  -d –r D:/SVN/工作文档
,LI@&o2e'Ni)J.{0(注意:这是临时打开的服务,命令执行后不能关闭窗口)
&bPfB_A)?;?.ge0用后台服务的方式可以设置开机自动执行,执行语句为: 我用Subversionu&~;`/f}`
D:/ Subversion/bin>sc create svnservice binpath= "d:/ Subversion/bin/svnserve.exe --service –r D:/SVN/工作文档
;Nf9].f.lP3g%~B0就可以用net svnservice stop 或者start来启动服务了 也可以在Sevices.msc来启动了。 我用Subversion ~'vG u/ }Mh
多库下运行服务器的方式:
fbX[*yOT0SVN服务器的执行如下命令:
i3H4Jw Ol[ nO0svnserve –d –r D:/SVN 我用Subversion-U2o~te5o%Q;H ]D
(此时svnserve可以为多个版本库工作)
#O SU&Ufo+`Q9}W]0用后台服务的方式可以设置开机自动执行,执行语句为:
{4relfZ+j)LC0sccreate SVNService binpath= "D:/Subversion/bin/svnserve.exe --service -rD:/SVN" displayname= "SVNService" depend= Tcpip start= auto  
(x6zp+Ue#j$K05.用户客户端访问 用户访问的地址可以写成:svn://IP地址/版本库名称 我用Subversionoax4s*X Z$tA
SVN服务端权限的制定 我用SubversionY4{Vd{!`&EW
多库下设置权限: 我用SubversionR7w[2Sg/P6ef|
jsm是工作文档的管理者,对工作文档有完全权限
S?b$z~.lvbsf;LL0wrl对工作文档的公司CMMI建设有完全的权限,但对其中的/培训试题/试题 目录没有任何的权限 我用Subversion5J#F�~ ll^Z
sb对工作文档的公司CMMI建设有完全的读权限,但对其中的/培训试题/试题 目录没有任何的权限
Q8{+U|j*ySG|0对应的组及组的用户:
tK6hX8?0group_CMMI:jsm 我用Subversion} {hS)v
group_wjjc:wrl 我用Subversion e/d(@1S/PMT8T_pF
group_xczh:sb
$r�E.i_p7y0配置授权: 我用Subversionnd;H&tF)_v{6Q+b,}
[groups] 我用SubversionK;kMH$h;Qe
group_CMMI = jsm 我用Subversion9M_u?m*he]4W
group_wjjc = wrl
wvT^SVH0group_xczh = sb
q&L8|bGuKe0[/] 我用Subversion#J"KAJ;{ON9eD�_
* = r 我用SubversionX.o~kfm-K
[工作文档:/] 我用Subversion,p0V8y G6I/R9y4BDq
@group_CMMI = rw
DAxP2iCPq0@group_wjjc = rw 我用SubversionH` G?_@:jWL
@group_xczh = r 我用Subversionp_Ft'X4M5_&/
[工作文档:/培训试题/试题] 我用Subversion)`N9C@d
@group_CMMI = rw
V*gF4D-tPi[0@group_wjjc =
b,L4v$Z [+L%gqZ0@group_xczh = 我用Subversion$[5HCJmT
关于中文目录,也是没有问题的,只是注意要把authz文件转化为UTF-8无BOM格式,在我的WINXP的UltraEdit里显示的文件格式为U8-DOS,具体的做法是用UltraEdit打开authz文件,然后选择“文件->转换->ASCII转UTF-8”,然后保存。
*v7c-Jci t:yGrJ0利用UltraEdit我们可以将BOM去掉。方法是:首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可
9X.Wnn+}.~Z0
J$[Z`.vsy+u�kb0SVN备份 我用SubversionuZ9X+RhT4B
备份共分为三种:一个是:完全备份,增量备份,同步版本库
S0a$|;K|c9]} zg(k01.完全备份 我用Subversionk-ECW]4V4s
(1)利用语句实现备份
4f0C8s6h?#Q U0@2@�s,k0例如把d:/SVN中的版本库 xuexi 备份到 d:/SVNBAK 的目录下,只需要在DOS 的环境下运行: 我用SubversionJp/{8u'[-AG5v
Svnadmin hotcopy d:/SVN/xuexi d:/SVNBAK/xuexi 我用Subversionx+|T/:ewX
我用SubversionQV.Gu-my2}
本次的操作成功的把版本库备份了。可是此操作只是把一个根目录下的一个版本库备份了,所以这样操作会很繁琐的。 我用Subversion%H.`/k�nWN/Q
(2)利用脚本完成的完全备份,这种备份可以实现一个根目录下的所有版本库的备份。
0lH@(E5[8M0此时要在D:/SVN下创建2个文件。 我用Subversiong@&rY]3Z9VThS!nC
一个文件是simpleBackup.bat : 我用Subversion8e+cb!O,Q1l
@echo 正在备份版本库%1......
,N}5s^*A)n0Cp0@%SVN_HOME%/bin/svnadmin hotcopy %1 %BACKUP_DIRECTORY%/%2
B5a^+j'Fm `0@echo 版本库%1成功备份到了%2! 我用Subversion+@of'|Uq}
一个文件是 backup.bat 我用Subversion6uL:V*k|n
echo off 我用SubversionfP([T$x{2iW$@;N
rem Subversion的安装目录
+/�Ch#JF"d0K&c0set SVN_HOME="D:/Subversion"
!v'E i3br"o!TWZ0rem 所有版本库的父目录
wL-g#e%B0set SVN_ROOT=D:/SVN
?{_+E�}8hN0rem 备份的目录
EB_Z}/h6bK2`Z0set BACKUP_SVN_ROOT=D:/SVNBAK
Z#|7}:V|6b0set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%/%date:~0,10% 我用Subversion9Z6pm)Az5@O
if exist %BACKUP_DIRECTORY% goto checkBack
~'u#x"k-EY5J)m0echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log 我用Subversion#YH$gb"mX` U?)z
mkdir %BACKUP_DIRECTORY% 我用Subversion dM#zm+A*mBU
rem 验证目录是否为版本库,如果是则取出名称备份
0Z0kNZ9a5t^,]$A+u0for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" % SVN_ROOT%/simpleBackup.bat "%%~fI" %%~nI 我用SubversionU8v7Iz~3k1kq#]I#?
goto end
T/7B9w(@*V0:checkBack 我用SubversionQn2fY'd;d
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
TMR(h;j2^n ~2y@C0goto end 我用SubversionN4aNWpwl1M
:end 我用Subversion-?PJ#~qXtG1z:Z

4TDz;Yyc�j0把这两个文件放到D:/SVN 中后,可以直接运行backup.bat ,然后会发现在SVNBAK 文件夹中出现了备份的文件夹2008-02-19,这样D:/SVN目录下的所有的版本库就都备份到了D:/SVNBAK/2008-02-19中,这项利用脚本的操作可以直接的把一个根目录中的所有的版本库备份了。 我用Subversion)?3r!z-n)c'u#yS wG1H
为了不遗忘备份,我们需要把备份的操作加入到系统的at当中去,运行: 我用Subversiont3]U2L1Tz
at 12:35 /everyday D:/SVN/backup.bat 我用Subversion5Q'BW`sd8b~

5`f-E/_/02.增量备份  
$w#O/U|c^;z.Jp0首先是需要在 学习 的hooks目录下建立2个文件。一个文件是:post-commit.bat: 我用Subversiong4s}8TLW+J
echo off
[F:vF:zv0{U&E0set SVN_HOME="D:/Subversion" 我用SubversionA#ds{,M2N g8mle
set SVN_ROOT=D:/SVN
#S?oql#L0set UNIX_SVN_ROOT=D:/SVNBAK
n DP#rh-?-H&q0set DELTA_BACKUP_SVN_ROOT=D:/SVNBAK/delta
S vz4hJn�d0set LOG_FILE=%1/backup.log
Z icN.]0echo backup revision %2 >> %LOG_FILE%
c,Kt1a-wm}I0for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2
0v/%J(gl0goto end
k'LU/[jl/@gV0:end
_/4oc/7c0一个文件是  deltaBackup.bat: 我用Subversion,X�c;Y(O*O["H-k(X`
@echo 正在备份版本库%2......
dEa/f!R'i+R%?|0%SVN_HOME%/bin/svnadmin dump %SVN_ROOT%/%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%/%1.dump
%A?r:l+TI0@echo 版本库%2成功备份到了%3! 我用SubversionJ4z!P,^x*x&I3e1L pJ
通过post-commit.bat这个脚本,可以实现D:/SVN下的版本库提交时自动增量备份到D:/SVNBAK/delta(确定这个目录存在)。把这两个目录直接考到 xuexi 下面就可以直接实现xuexi 的自动备份。 我用Subversion6O+HDH8mXoi/L
3.版本库同步
/HC&y&P;Q5@VF�I0Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。 我用SubversionF8Su/_0_$z
3.1. 对目标库初始化
5W;DGS5e0svnsync init svn://localhost/project2 svn://localhost/project1 我用Subversion%I.WO'c }-?io
我用Subversionl[ D9CTcc[ xG
其中project2是目标的版本库,而project1是源版本库。其中的目标版本库必须为空,而且必须允许修订版本属性的修改,也就是在目标的版本库的hooks目录里添加一个文件pre-revprop-change.bat,内容为空即可。 我用Subversion{DN%x$AA
3.2. 同步project2到project1
y1ZZS4c!nlEl0svnsync sync svn://localhost/project2 我用SubversionTjD8e{,jn

L*M5{,ct0这时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果目标版本库发生了变更,则无法继续同步了。 我用Subversion0oH9@y1x&i
3.3. 同步历史属性的修改 我用SubversionG7l5~,cX
因为同步不会更新对历史属性的修改,所以svnsync还有子命令copy-revprops,可以同步某个版本的属性。 我用SubversionOGZ.|,]
3.4. 钩子自动同步
"v9L3jEhh3I8qoV0希望在每次提交时同步,则需要在源版本库增加post-commit脚本,内容如下: 我用Subversion'b:K-YG#E$F2[
echo off 我用Subversion3M2L`-P7n't~
set SVN_HOME="D:/Subversion"
)H!@�/YgnmB0%SVN_HOME%/bin/svnsync sync  --non-interactive svn://localhost/project2 我用Subversionm:]�j~6G;Z
我用Subversion,H ff`z
把以上内容存放为post-commit.bat,然后放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步。
+h.aLIEA;o0
a%U%DI$E04。SVN备份的脚本 我用Subversion+c&LH;F#g6C
我所有的目录在d:/SVN上,我的备份的目录是 d:/svn_bak 我用Subversion7Y tK$OQ9U
第一个文件是调度脚本 svndump.bat: 我用Subversion~z'Y�l$B%[
@echo off
1@9_C8RUY VeRu%O:p�R-k0@echo ================================================ 我用Subversion mS r i7fkNh^
@echo  说明:启动备份时,需要配置两个环境变量 我用Subversionaq#m%b+O:|'w(KX
@echo    1、SVN_HOME     指定svn的安装目录 我用SubversionH%g+_2m:ht:|.~?hm+J
@echo    2、RAR_CMD      指定RAR命令行压缩工具所在目录 我用SubversionaL;AXM8VD8jA]
@echo    3、SVN_REPOROOT 指定项目库的根目录(多库模式) 我用Subversion%[e3{Quj`A
@echo  另外,如果需要异地备份,可以指定为网络映射Z盘 我用SubversionUg/n#ol/2t
@echo ================================================
p8T$n,AAA7AVQ0rem set logfile=svn_bak.log 我用Subversion,EwKU"d
set SVN_HOME=D:/Subversion/bin 我用Subversionx!fm*hB?3D7Y
set SVN_ADMIN="%SVN_HOME%/svnadmin.exe"
9/*`zdmV*@/`w@0set SVN_LOOK="%SVN_HOME%/svnlook.exe" 我用SubversionXS/W�G.fX$}
set SVN_REPOROOT=d:/SVN 我用SubversionO([uu+Ge
set RAR_CMD="C:/Program Files/WinRAR/Rar.exe" 我用Subversionk#I_/s}s M
rem if not exist z:/nul net use z: //192.168.2.226/g$/svndump 我用Subversion5E*C'K�zK S/z5i"~"_V6cy
我用Subversion2B?+f$R7K3wI3h
rem 读取项目库列表文件,并忽略其中;开头的行:victory:
*E'Sbq"dJ/d/x,{0FOR /f "eol=;" %%C IN (projectlist.conf) DO  @call dump.bat %%C
*{ a0E1[@0第二个文件是备份脚本 dump.bat : 我用Subversion"?6Tq)Frj
@ECHO OFF
Q/{m5O)@0rem 调用格式:dump 项目库名 我用Subversion*QAT!~$K�^m$~
if "%1"=="" goto no_args
/BVe:Os/0set PROJECT=%1
7@B5f-WTTN0if not exist %PROJECT% mkdir %PROJECT% 我用Subversionu]e+q[(T7?q
cd %PROJECT% 我用SubversiongEVZgaNm
SET LOWER=0 我用SubversionjT!r~r9l6L+L'n"NS
SET UPPER=0 我用SubversionBuZ^ m
@FOR /f %%D IN ('%SVN_LOOK% youngest %SVN_REPOROOT%/%PROJECT%') DO set UPPER=%%D 我用SubversionEzk:B N
if %UPPER%==0 GOTO :N_EXIT
i'P!Y(W1_*G(OS0我用Subversionw"xv8r�OX{4q
if not exist %PROJECT%_last_revision.txt GOTO :BAKUP 我用Subversion8ZhlI-l.N d}!t
我用Subversionz7S6k8y1J
rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证) 我用Subversion)?@Yn:W4}]PS
@FOR /f %%C IN (%PROJECT%_last_revision.txt) DO @set LOWER=%%C 我用Subversion$~E5qV"@*dD
@set /a LOWER=%LOWER%+1
t#^E}ih*}D0rem 不需要备份,则跳转结束 我用Subversion?p;O;WA
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
0HRQ#`7{7A Y,LE I0我用Subversion7mW'DpX$}U;wv
:BAKUP
F}'mFq/aa0SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
H._cm:fIGr"@0@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
2LYkr.^.@�H0%SVN_ADMIN% dump %SVN_REPOROOT%/%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp 我用SubversionAT]*t kz
%RAR_CMD% a -df %PROJECT%_%UPPER%.rar %FILENAME%.dmp
w,Z,Z"{2af2{&J0我用Subversion/8}^3M5w"WV
rem 准备写备份日志信息 我用Subversion&CKQ4Y6H4m L$H
IF %LOWER% gtr 0 GOTO :WRITENOTE
Y3v1eu%iJc,kb8s0if not exist %PROJECT%_log.txt @copy ../log.conf %PROJECT%_log.txt
_bj2?JPK9@0@ECHO %date% >> %PROJECT%_log.txt
j5vi/�V:]0@echo  -- 添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt
ZO.yCZ3DZ0GOTO :COMPLETE 我用SubversionJ/-u6aLu4p}A
:WRITENOTE
/Cq.Z(Y`R%l"Amh0@ECHO %date% >> %PROJECT%_log.txt
:hu{x$xBZ0@echo  -- 添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt 我用Subversion WR%c `G

7P ?'N0W�e+p"v0:COMPLETE
_6YK1d QyO0rem 下面一行用于拷贝备份文件到映射的驱动器上
wez(^$S5ej%A0rem copy %PROJECT%.rar z:/%PROJECT%/
1u)W2Ea!B)?fMmA0
3P9E�t_^ic^$D0@echo %UPPER% > %PROJECT%_last_revision.txt 我用Subversionw W,g1gK`h;}2g
:N_EXIT
j}2Z'T&GuO/~TG0@echo 项目库%PROJECT%处理结束... 我用SubversionL*h)^g[-y
@CD..
6s:])?.iTb0@exit /B
0e(F[;wPR_R0D9k%rd}0:no_args 我用Subversion{`R6p$LS�B
@ECHO ON
2DA7XRD2?0@echo "正确调用方法: dump 项目库名"
(xpq2Mla4n0
xZw}0Bv1sX B0s3G0第3个文件是项目库列表projectlist.conf需要备份的清单,每个项目一行 我用Subversion5^%_+Ki"tocX
学习 我用SubversionXMu+],TMzc6J
Xuexi 我用Subversion6@-kw&`mH.X#@8}
学习备份 我用SubversionMJ6w�`y3tnz3B
第4个文件是日志模版脚本log.conf :
&H,n1D)Z i5rB0备份日志: 我用Subversion_PmD6g;e}j
在备份的文件夹中加上这四个文件,然后运行svndump.bat ,就会出现:学习, 我用SubversionbQX4js1f%m{Y
Xuexi,学习备份,这3个版本库的备份文档,里面有下图所示的文件。
原创粉丝点击