SVN服务端的配置

Posted syd_programming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN服务端的配置相关的知识,希望对你有一定的参考价值。

1. 安装服务端


Ewqr[i5J0 安装subversion,我选择的是svn-1.4.1-setup.exe进行安装,安装到 我用Subversion E LZm%/(KQf
D:/Subversion 。
zW%b2]X!fk0 2. 创建SVN存储库(repository) 我用SubversionJ2m7U H�t#w
也就是建立版本库,我建立的是多库,先在D盘建立一个文件夹SVNROOT,然后在这个文件夹里建立版本库,我首先创建一个版本库的名称为:工作文档
,i]l2]`a�e+`b-z(G0 建立版本库的方法:输入DOS命令:
0UC ?GI,cI[0 svnadmin 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? ]fB9i jDN0 打开/conf/目录,打开svnserve.conf找到下面的句子 我用Subversion/yt*k"v,A&|
[general]
DB6F u(`8L/|0 # password-db = passwd
tp0w:q0b9Qqz3p0 # anon-access = none  
G.m tJ"nWo2L6T0 # auth-access = write  
r/a55NPl0 # 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�T0 4. 运行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/工作文档
,L I@&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 [*yOT0 SVN服务器的执行如下命令:
i3H4Jw Ol[ nO0 svnserve –d –r D:/SVN 我用Subversion-U2o~te5o%Q;H ]D
(此时svnserve可以为多个版本库工作)
#OS U&Ufo+` Q9W]0 用后台服务的方式可以设置开机自动执行,执行语句为:
4relfZ+j)LC0 sc create SVNService binpath= "D:/Subversion/bin/svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto  
(x6zp+Ue#j$K0 5. 用户客户端访问 用户访问的地址可以写成:svn://IP地址/版本库名称 我用Subversiono ax4s*X Z$tA
SVN服务端权限的制定 我用SubversionY4Vd!`&EW
多库下设置权限: 我用SubversionR7w[2S g/P6ef |
jsm是工作文档的管理者,对工作文档有完全权限
S? b$z~.lvbsf;LL0 wrl对工作文档的公司CMMI建设有完全的权限,但对其中的/培训试题/试题 目录没有任何的权限 我用Subversion5J#F�~ ll^Z
sb对工作文档的公司CMMI建设有完全的读权限,但对其中的/培训试题/试题 目录没有任何的权限
Q8+U|j*ySG|0 对应的组及组的用户:
tK6hX8?0 group_CMMI:jsm 我用SubversionhS)v
group_wjjc:wrl 我用Subversione/d(@1S/PM T8T_pF
group_xczh:sb
$r�E.i_p7y0 配置授权: 我用Subversion nd;H&tF)_v6Q+b,
[groups] 我用SubversionK;kMH$h;Qe
group_CMMI = jsm 我用Subversion9M_u?m*he]4W
group_wjjc = wrl
wvT^SVH0 group_xczh = sb
q&L8|bG uKe0 [/] 我用Subversion#J"KAJ;ON9e D�_
* = r 我用Subversion X.o~kfm-K
[工作文档:/] 我用Subversion,p0V8y G6I/R9y4BDq
@group_CMMI = rw
DAx P2iCPq0 @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-Jc i t:yGrJ0 利用UltraEdit我们可以将BOM去掉。方法是:首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可
9X.W nn+.~Z0
J$[Z`.vsy+u�kb0 SVN 备份 我用SubversionuZ9X+Rh T4B
备份共分为三种:一个是:完全备份,增量备份,同步版本库
S0a$|;K|c9] zg(k0 1. 完全备份 我用Subversion k-ECW]4V4s
(1)利用语句实现备份
4f0C8s6h?#QU0@2@�s,k0 例如把d:/SVN中的版本库 xuexi 备份到 d:/SVNBAK 的目录下,只需要在DOS 的环境下运行: 我用SubversionJp/8u'[-AG5v
Svnadmin hotcopy d:/SVN/xuexi d:/SVNBAK/xuexi 我用Subversionx+|T/:ewX
我用Subversion Q V.G u-my2
本次的操作成功的把版本库备份了。可是此操作只是把一个根目录下的一个版本库备份了,所以这样操作会很繁琐的。 我用Subversion%H.`/k�nW N/Q
(2)利用脚本完成的完全备份,这种备份可以实现一个根目录下的所有版本库的备份。
0lH@(E5[8M0 此时要在D:/SVN下创建2个文件。 我用Subversiong@&r Y]3Z9VT hS!nC
一个文件是simpleBackup.bat : 我用Subversion8e+cb!O,Q1l
@echo 正在备份版本库%1......
,N5s^*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$x2iW$@;N
rem Subversion的安装目录
+/�Ch#JF"d0K&c0 set SVN_HOME="D:/Subversion"
!v'E i3br"o!TWZ0 rem 所有版本库的父目录
wL-g#e%B0 set SVN_ROOT=D:/SVN
?_+E�8hN0 rem 备份的目录
EB_Z/h6bK2` Z0 set BACKUP_SVN_ROOT=D:/SVNBAK
Z#|7:V|6b0 set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%/%date:~0,10% 我用Subversion9Z6pm)Az5@O
if exist %BACKUP_DIRECTORY% goto checkBack
~'u#x"k-EY5J)m0 echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log 我用Subversion#YH$gb"mX`U?)z
mkdir %BACKUP_DIRECTORY% 我用Subversion dM#zm+A*mBU
rem 验证目录是否为版本库,如果是则取出名称备份
0Z0kNZ9a5t^,]$A+u0 for /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@C0 goto end 我用SubversionN4aNWpwl1M
:end 我用Subversion-?PJ#~qXtG1z:Z

4TDz;Y yc�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]U2L1T z
at 12:35 /everyday D:/SVN/backup.bat 我用Subversion5Q'BW` sd8b~

5`f-E/ _/0 2.增量备份  
$w#O/U|c^;z.Jp0 首先是需要在 学习 的hooks目录下建立2个文件。一个文件是:post-commit.bat: 我用Subversiong4s8TLW+J
echo off
[F:vF:zv0 U&E0 set SVN_HOME="D:/Subversion" 我用SubversionA#ds ,M2N g8mle
set SVN_ROOT=D:/SVN
#S?oql#L0 set UNIX_SVN_ROOT=D:/SVNBAK
n DP#rh-?-H&q0 set DELTA_BACKUP_SVN_ROOT=D:/SVNBAK/delta
Svz4hJn�d0 set LOG_FILE=%1/backup.log
Z icN.]0 echo backup revision %2 >> %LOG_FILE%
c,Kt1a-wmI0 for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2
0v/%J(gl0 goto 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�I0 Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。 我用Subversion F8Su/_0_$z
3.1. 对目标库初始化
5W;D GS5e0 svnsync 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!nlEl0 svnsync sync svn://localhost/project2 我用SubversionTjD8e,jn

L*M5,ct0 这 时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候 project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果 目标版本库发生了变更,则无法继续同步了。 我用Subversion0oH9@y1x&i
3.3. 同步历史属性的修改 我用Subversion G7l5~,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$E0 4。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 Ve Ru%O:p�R-k0 @echo ================================================ 我用Subversion mS ri7fkNh ^
@echo  说明:启动备份时,需要配置两个环境变量 我用Subversion aq#m%b+O:|'w(KX
@echo    1、SVN_HOME     指定svn的安装目录 我用SubversionH%g+_2m:h t:|.~?hm+J
@echo    2、RAR_CMD      指定RAR命令行压缩工具所在目录 我用SubversionaL;A XM8VD8jA]
@echo    3、SVN_REPOROOT 指定项目库的根目录(多库模式) 我用Subversion%[e3 Quj`A
@echo  另外,如果需要异地备份,可以指定为网络映射Z盘 我用SubversionUg/n#ol/2t
@echo ================================================
p8T$n,AAA7AVQ0 rem 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@0 set SVN_LOOK="%SVN_HOME%/svnlook.exe" 我用SubversionXS/W�G.fX$
set SVN_REPOROOT=d:/SVN 我用Subversion O([uu+Ge
set RAR_CMD="C:/Program Files/WinRAR/Rar.exe" 我用Subversionk#I _/ssM
rem if not exist z:/nul net use z: //192.168.2.226/g$/svndump 我用Subversion5E*C'K�zKS/z5i"~"_V6c y
我用Subversion2B?+f$R7K3wI3h
rem 读取项目库列表文件,并忽略其中;开头的行:victory:
*E'Sbq"dJ/d/x,0 FOR /f "eol=;" %%C IN (projectlist.conf) DO  @call dump.bat %%C
* a0E1[ @0 第二个文件是备份脚本 dump.bat : 我用Subversion"?6Tq)Frj
@ECHO OFF
Q/ m5O)@0 rem 调用格式:dump 项目库名 我用Subversion*Q AT!~$K�^m$~
if "%1"=="" goto no_args
/BVe:Os/0 set PROJECT=%1
7@ B5f-WTTN0 if 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 我用SubversionE zk:BN
if %UPPER%==0 GOTO :N_EXIT
i'P!Y(W1_*G(OS0 我用Subversionw"x v8r�O X4q
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#^Eih*D0 rem 不需要备份,则跳转结束 我用Subversion?p;O;WA
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
0HRQ#`77A Y,L E I0 我用Subversion7mW'DpX$U;wv
:BAKUP
F'mFq/aa0 SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
H._cm:fIG r"@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,kb8s0 if 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.yCZ3DZ0 GOTO :COMPLETE 我用SubversionJ/-u6aLu4pA
:WRITENOTE
/Cq.Z(Y`R%l"Amh0 @ECHO %date% >> %PROJECT%_log.txt
:hux$xBZ0 @echo  -- 添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt 我用SubversionWR%c`G

7P ?'N0W�e+p"v0 :COMPLETE
_6YK1d QyO0 rem 下面一行用于拷贝备份文件到映射的驱动器上
we z(^$S5ej%A0 rem 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
j2Z'T&GuO/~TG0 @echo 项目库%PROJECT%处理结束... 我用SubversionL*h)^g[-y
@CD..
6s:])?.iT b0 @exit /B
0e(F[;wPR_R0D9k%rd0 :no_args 我用Subversion`R6p$L S�B
@ECHO ON
2DA7XR D2?0 @echo "正确调用方法: dump 项目库名"
(xpq2Mla4n0
xZw0Bv1sX B0s3G0 第3个文件是项目库列表projectlist.conf需要备份的清单,每个项目一行 我用Subversion5^%_+Ki"tocX
学习 我用Subversion XMu+],TMzc6J
Xuexi 我用Subversion6@-kw&`mH.X#@8
学习备份 我用SubversionMJ6w�`y3tnz3B
第4个文件是日志模版脚本log.conf :
&H,n1D)Zi5rB0 备份日志: 我用Subversion_PmD6g;ej
在备份的文件夹中加上这四个文件,然后运行svndump.bat ,就会出现:学习, 我用SubversionbQX4js1f%mY
Xuexi,学习备份,这3个版本库的备份文档,里面有下图所示的文件。

以上是关于SVN服务端的配置的主要内容,如果未能解决你的问题,请参考以下文章

SVN服务端的配置

版本控制SVN服务端的安装配置

版本控制SVN服务端的安装配置

CentOS 6.5系统上安装SVN服务器端的方法及目录访问权限配置(转总结)

SVN 客户端的安装与配置

删除客户端的svn文件,不会将服务器里的文件也删除吧?