SVN总结

上一篇 / 下一篇  2008-02-21 09:01:18

SVN服务端的配置 我用Subversion5YsNNX|6?
1.安装服务端
x.?t ^.c9b9X(I%Z0安装subversion,我选择的是svn-1.4.1-setup.exe进行安装,安装到 我用Subversionb\x6}R!vG0^;\
D:\Subversion 。
+A\+_ s F3lI/b02.创建SVN存储库(repository)
??5}#e^)J1l g0也就是建立版本库,我建立的是多库,先在D盘建立一个文件夹SVNROOT,然后在这个文件夹里建立版本库,我首先创建一个版本库的名称为:工作文档
*Z,` A FK]&@6wI U0建立版本库的方法:输入DOS命令: 我用SubversionB&i@%F.z@G/Bvf
svnadmin create D:\SVN\工作文档
.nZ4|O Q&~0repository创建完毕后会在目录下生成若干个文件和文件夹,dav目录是提供给Apache与mod_dav_svn使用的目录,让它们存储内部数据;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。 我用Subversion*lH$]6}]2C-oa o+v
3.配置SVN服务器 我用Subversionu M^O ` Y}-T
配置服务器的地方就是你所建立版本库的地方F:\SVNROOT\工作文档。
{"Og-Vt#w*D0打开/conf/目录,打开svnserve.conf找到下面的句子:
[x#`!Vo8T,C0[general] 我用Subversionv(c |-S$v\I*fz4^
# password-db = passwd
0Y;@N9B `A0# anon-access = none  
;]bb}2i7P6mE F0# auth-access = write   我用Subversion(q i]p6B-m
# authz-db = authz
|9qyH/n]u0# realm = My First Repository 我用SubversionxYO5}%cO5t
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件.anon-access = none 是匿名用户不能访问,必须要有用户名和密码。(注意:问题就出在这,一定要注意格式去掉注释后要顶格不能有空) 我用Subversionm'ZG3e"v\
同样打开passwd文件,将
x#]s#J\h:i8@!T0
-D`Ho3s\.of0# harry = harryssecret
U.vk'S?0# sally = sallyssecret 我用Subversion9uB+A&Bj-]"u
格式为“用户名 = 密码”,如可插入一行:mm = mm,即为系统添加一个用户名为mm,密码为mm的用户.(注意顶格写不要有空隙)。
D9Z2}XjWm0n.N04.运行SVN服务器
LL,|4z9@_&_${1S0单库下运行服务器的方式: 我用Subversion7e)B2s mn
SVN服务器的执行如下命令:
2b ]#L+v4d9m"l8^6V_\0svnserve --daemon --root D:\SVN\工作文档(此时svnserve只能为一个版本库工作)
!p9g{9V)T`TS)b0可以简写为:svnserve  -d –r D:\SVN\工作文档 我用Subversion/C6ssX9^m,Lo
(注意:这是临时打开的服务,命令执行后不能关闭窗口) 我用Subversion @Y Jv v
用后台服务的方式可以设置开机自动执行,执行语句为: 我用Subversionz(WaQ$hLFF
D:\ Subversion\bin>sc create svnservice binpath= "d:\ Subversion\bin\svnserve.exe --service –r D:\SVN\工作文档 我用Subversionv2S%F.y7C4k8a"K^+EJ
就可以用net svnservice stop 或者start来启动服务了 也可以在Sevices.msc来启动了。
X'Qd\(Dd]y]0多库下运行服务器的方式: 我用Subversion,U)y$W2CN@hd#| o2YZ
SVN服务器的执行如下命令:
^3U0}%Xb5w0svnserve –d –r D:\SVN 我用Subversion*hwr;}C
(此时svnserve可以为多个版本库工作)
fij*Z/b0用后台服务的方式可以设置开机自动执行,执行语句为: 我用Subversiont5h'Y5zi;I^*l"R2~e1e
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto  我用Subversion5H V'E[^;B9V$X-D
5.用户客户端访问 用户访问的地址可以写成:svn://IP地址/版本库名称
O9K.f0w |S%c X0SVN服务端权限的制定
/L)tT'm6]pd0多库下设置权限:
(r2\bv`^TE0jsm是工作文档的管理者,对工作文档有完全权限 我用Subversion)B8Iys0mV4] vL u
wrl对工作文档的公司CMMI建设有完全的权限,但对其中的\培训试题\试题 目录没有任何的权限 我用Subversion1dx%eTj
sb对工作文档的公司CMMI建设有完全的读权限,但对其中的\培训试题\试题 目录没有任何的权限 我用Subversionp%C8kq0k+G4J
对应的组及组的用户:
`AU%\9D0group_CMMI:jsm
;P-jh2n,Eo/t_0group_wjjc:wrl 我用SubversionX%x&fU,B/i9[ }
group_xczh:sb 我用Subversion6I(L,|p-V8u N
配置授权:
Ms8j E N3n0[groups]
4@/`M1? ]6i.^0group_CMMI = jsm
2]"kG1GD_E1i.O6M t0group_wjjc = wrl
%E/Y!gj@"_Wr1M0group_xczh = sb
)oAl P'z$v0[/] 我用SubversioneK.X;AhX
* = r
8M(i;Q8w$S(L'n'eJ0[工作文档:/] 我用SubversionKf1?DP"n_s
@group_CMMI = rw 我用SubversionRA"h vZ8B
@group_wjjc = rw
{!J"S-Q$R`| W0@group_xczh = r
/^ f!uld8Jk0[工作文档:/培训试题/试题] 我用Subversion,]Gug'VZ4v
@group_CMMI = rw 我用Subversion:S+|5~ J&L#PV,wG9C:N
@group_wjjc = 我用Subversion*wrh7no!|qO3e
@group_xczh =
SL:RtIZn-w0关于中文目录,也是没有问题的,只是注意要把authz文件转化为UTF-8无BOM格式,在我的WINXP的UltraEdit里显示的文件格式为U8-DOS,具体的做法是用UltraEdit打开authz文件,然后选择“文件->转换->ASCII转UTF-8”,然后保存。
(W$vKgl-d s0利用UltraEdit我们可以将BOM去掉。方法是:首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可 我用SubversionG5C_tV'P

t!rI/K)Xz0SVN备份
QOTAW$Qg9inN0备份共分为三种:一个是:完全备份,增量备份,同步版本库
fli2e u;}D01.完全备份
N&p*y-T ~&BWz N0(1)利用语句实现备份
+R^A8uMD Cg6v0例如把d:\SVN中的版本库 xuexi 备份到 d:\SVNBAK 的目录下,只需要在DOS 的环境下运行: 我用Subversion_S-fDO(P&I
Svnadmin hotcopy d:\SVN\xuexi d:\SVNBAK\xuexi 我用SubversionGN8R vY`d

-|YC}c?L3{.D0本次的操作成功的把版本库备份了。可是此操作只是把一个根目录下的一个版本库备份了,所以这样操作会很繁琐的。 我用SubversionB:dp?_;g
(2)利用脚本完成的完全备份,这种备份可以实现一个根目录下的所有版本库的备份。 我用Subversion7}_ _&RK/Jf
此时要在D:\SVN下创建2个文件。
"b0vD1ydb ? ]9A+h\5`0一个文件是simpleBackup.bat :
Nk5S/J9t,u0@echo 正在备份版本库%1...... 我用Subversion1KbaT F8t
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2 我用SubversionX`s"cnQ
@echo 版本库%1成功备份到了%2! 我用SubversionJ F!^`sRM,t
一个文件是 backup.bat 我用Subversion#gMdRTE g
echo off
-q'|~R#`1Ey0rem Subversion的安装目录 我用Subversion!YHa|\*@
set SVN_HOME="D:\Subversion"
jiy%} hOXg0rem 所有版本库的父目录
vSgS1r0set SVN_ROOT=D:\SVN 我用Subversion9|;a#l/~ J Z;Q&O s
rem 备份的目录
6Qpb%zK5n0n0set BACKUP_SVN_ROOT=D:\SVNBAK
6tAz/pr*O?0set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%
8R]V6Ve1Z0if exist %BACKUP_DIRECTORY% goto checkBack 我用Subversion bA2|6s6xJ4a6m
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
l l}#o-k H2J0mkdir %BACKUP_DIRECTORY% 我用Subversionl:B Ws#b3TE!`lN
rem 验证目录是否为版本库,如果是则取出名称备份
K]"n$gu\hX5do$?0for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" % SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI 我用Subversion'uAy7YJ.[0V#G*o T.V
goto end 我用SubversionO._"j?vVS4[ ?
:checkBack 我用SubversionN!~woC3k$M2p5xa_
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。 我用Subversion`H5Xc$J
goto end 我用Subversion]0V7d;UN4Z6Vr
:end
-k~I#[r$_0
Yc}b0e;Y0把这两个文件放到D:\SVN 中后,可以直接运行backup.bat ,然后会发现在SVNBAK 文件夹中出现了备份的文件夹2008-02-19 ,这样D:\SVN 目录下的所有的版本库就都备份到了D:\SVNBAK\2008-02-19中,这项利用脚本的操作可以直接的把一个根目录中的所有的版本库备份了。 我用Subversion"FF)M$Y$H5Z
为了不遗忘备份,我们需要把备份的操作加入到系统的at当中去,运行: 我用SubversionJm%A%RDiYP
at 12:35 /everyday D:\SVN\backup.bat 我用SubversionRL+ysZ7~*q

K+cTU []hp;E[/W02.增量备份  
$i:T}3s#v0首先是需要在 学习 的hooks目录下建立2个文件。一个文件是:post-commit.bat: 我用SubversionE2n k7g%B"V{-\zz
echo off 我用Subversion$_tK-FjAL
set SVN_HOME="D:\Subversion"
8]t#mV A3|s0set SVN_ROOT=D:\SVN 我用Subversion6}NE;V1\nJp
set UNIX_SVN_ROOT=D:\SVNBAK 我用Subversion%j_%t2}7~W)Fq
set DELTA_BACKUP_SVN_ROOT=D:\SVNBAK\delta 我用Subversion7RVA,j6U^9|l
set LOG_FILE=%1\backup.log
f4?1gIfE KbV0echo backup revision %2 >> %LOG_FILE%
v+m1g+r0y0for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2
Lv5u-RN^ fyn*Y0goto end 我用SubversionS?aYy4M+_!W&X
:end 我用Subversion`;rf"Ge ]8z$s|6i(p
一个文件是  deltaBackup.bat: 我用SubversionSo5do0ed5nk
@echo 正在备份版本库%2...... 我用Subversion8I'TOaqU b
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump
7C%u3y0JS(W@}h fj0@echo 版本库%2成功备份到了%3!
azX6o'n!L9_ |)Y0通过post-commit.bat这个脚本,可以实现D:\SVN下的版本库提交时自动增量备份到D:\SVNBAK\delta(确定这个目录存在)。把这两个目录直接考到 xuexi 下面就可以直接实现xuexi 的自动备份。
c;a ];oz|03.版本库同步
!o4z2}WWE-z2QQ-R%l{0Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。 我用Subversionx#V4p2Dr7g6i!Bw
3.1. 对目标库初始化 我用Subversionv)aY)rV(_4r
svnsync init svn://localhost/project2 svn://localhost/project1 我用Subversionk6U9gq!dt:w
我用Subversion`0n:} Xq)YOx*X
其中project2是目标的版本库,而project1是源版本库。其中的目标版本库必须为空,而且必须允许修订版本属性的修改,也就是在目标的版本库的hooks目录里添加一个文件pre-revprop-change.bat,内容为空即可。
ok&F*M/v!M03.2. 同步project2到project1
[ t`C7~ obl0svnsync sync svn://localhost/project2
.W[WnO:@I%[r!d0我用Subversion2F]U!q8vV
这时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果目标版本库发生了变更,则无法继续同步了。 我用Subversion}:i$x$_k!W%m:B
3.3. 同步历史属性的修改
~ K+M.gRs$\5fK5z0因为同步不会更新对历史属性的修改,所以svnsync还有子命令copy-revprops,可以同步某个版本的属性。 我用Subversionf"^%| } jk
3.4. 钩子自动同步 我用SubversionvGD@'Wv
希望在每次提交时同步,则需要在源版本库增加post-commit脚本,内容如下:
~;BW!EtH*z0echo off
!J'H)O m!F _0set SVN_HOME="D:\Subversion"
"e1T1r.v i&S~g0%SVN_HOME%\bin\svnsync sync  --non-interactive svn://localhost/project2 我用SubversionO A1Q:_f']
我用Subversionap'GS/aFI{:r%H
把以上内容存放为post-commit.bat,然后放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步。
v$R+O8xmV [7l0
1S6D@ mpk04。SVN备份的脚本
C+?2M#|9Y:n0我所有的目录在d:\SVN上,我的备份的目录是 d:\svn_bak 我用SubversionPf2qz}3\
第一个文件是调度脚本 svndump.bat: 我用Subversion-f?)O4F6cm.O
@echo off
3R;fR D#V0@echo ================================================ 我用Subversion _J/Q|*o
@echo  说明:启动备份时,需要配置两个环境变量 我用Subversiono.o&^7n~ b
@echo    1、SVN_HOME     指定svn的安装目录 我用Subversion`(W2o1R-TTNN!S
@echo    2、RAR_CMD      指定RAR命令行压缩工具所在目录 我用SubversionV_l G0~D`
@echo    3、SVN_REPOROOT 指定项目库的根目录(多库模式)
@y3D4f4pp3n _G0@echo  另外,如果需要异地备份,可以指定为网络映射Z盘 我用SubversionP aq%i3{RV
@echo ================================================
$@ UW&L!DpW'H5\0rem set logfile=svn_bak.log
M/QC9P0l M)Z0set SVN_HOME=D:\Subversion\bin 我用SubversionB"B-]x Y?$s!q
set SVN_ADMIN="%SVN_HOME%\svnadmin.exe" 我用Subversion(I)zT+DlM.J$Z7b:T
set SVN_LOOK="%SVN_HOME%\svnlook.exe"
9{L7h!G,?vv4FPq4PH0set SVN_REPOROOT=d:\SVN 我用Subversion8l.F D3]DQ#zsk
set RAR_CMD="C:\Program Files\WinRAR\Rar.exe" 我用Subversion%R!YH}Q5q;L#R
rem if not exist z:\nul net use z: \\192.168.2.226\g$\svndump 我用Subversionsy0G3^6_ z`/n
我用Subversion#_9yfN p:V
rem 读取项目库列表文件,并忽略其中;开头的行:victory:
Y^ w`F0t0FOR /f "eol=;" %%C IN (projectlist.conf) DO  @call dump.bat %%C
S ~V R Sw,G0第二个文件是备份脚本 dump.bat : 我用Subversion} [1J(qQ!cm
@ECHO OFF
W TK-]M0rem 调用格式:dump 项目库名
6d M+`@]8R2sy/Zh0if "%1"=="" goto no_args 我用SubversionC/`C%tK
set PROJECT=%1
iKJ+on8e&D8z0if not exist %PROJECT% mkdir %PROJECT%
;p(n!A O1~a0cd %PROJECT% 我用Subversion.j%?&g q _D3k
SET LOWER=0
6d:sV gp J,q0SET UPPER=0
C!kv9~.m;ua+~/s7T0@FOR /f %%D IN ('%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%') DO set UPPER=%%D 我用Subversion1K"Wk0am
if %UPPER%==0 GOTO :N_EXIT
%T[V lz?!~0我用Subversion8dfr2w_]4~
if not exist %PROJECT%_last_revision.txt GOTO :BAKUP
)|0n@p"[I#h0
;?]rp:Q0rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
r.?}qR LDd5]0@FOR /f %%C IN (%PROJECT%_last_revision.txt) DO @set LOWER=%%C
7Fsx]X(Z0@set /a LOWER=%LOWER%+1
v9S_ d1n5lb"bg0rem 不需要备份,则跳转结束 我用Subversionii(a9N A
IF %LOWER% gtr %UPPER% GOTO :N_EXIT 我用Subversion R;@4SJh!A2|
我用Subversion%JI^)xb7uAR$l[2l
:BAKUP
HcZF8W'v@T:K0SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
TN;|(| n L.w6_9P0@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME% 我用Subversion_ |} ? \Er8F:Y}1Y
%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp
]-gWr+gQ)g |;Hj0%RAR_CMD% a -df %PROJECT%_%UPPER%.rar %FILENAME%.dmp
;XF#E fPxr/I ^f0我用Subversion5n-i3_q1D+@
rem 准备写备份日志信息 我用Subversion]V:]\B#L*`#\0x
IF %LOWER% gtr 0 GOTO :WRITENOTE
&V|7JHrN^W"D G0if not exist %PROJECT%_log.txt @copy ..\log.conf %PROJECT%_log.txt 我用SubversionS#~u/?f.L.Hh
@ECHO %date% >> %PROJECT%_log.txt
8z-GT#y4{m6h7Z)F?B0@echo  -- 添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt
$C0p Ss NY8j0GOTO :COMPLETE 我用SubversionS.J&fUCZB
:WRITENOTE
A:Y!t P{n0@ECHO %date% >> %PROJECT%_log.txt 我用SubversionS@+I)?8} FO[y
@echo  -- 添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt 我用Subversion#ys3S0eP } ?4zK

8[:c,uo4A wk4{E Q$H0:COMPLETE
9hrZ x2df CV0rem 下面一行用于拷贝备份文件到映射的驱动器上 我用Subversion5?*B}6A*V"I;x~3P
rem copy %PROJECT%.rar z:\%PROJECT%\ 我用Subversion'qd;N^xz
我用Subversion _ W B^7YT3{Z)s"qx
@echo %UPPER% > %PROJECT%_last_revision.txt 我用Subversionn'a M0p k8W;S
:N_EXIT
0|4d J*Q1K(k1~p+{J0@echo 项目库%PROJECT%处理结束...
,m+fn6vXm4UL4`O1r#p0@CD..
CL8M}'N0@exit /B
4\,QA#?Ms0:no_args
h:k1{gQwShG {0z0@ECHO ON 我用Subversion!G"V1f,U%ksX3cK
@echo "正确调用方法: dump 项目库名"
G!L:] vn"r0
g/_6R'B,E.I0第3个文件是项目库列表projectlist.conf需要备份的清单,每个项目一行 我用Subversion6~$`x_Z
学习
`h$tGyf;y9~7uB[0Xuexi 我用Subversion_%ZPsm`
学习备份 我用Subversion&UTU1V]G2@%y
第4个文件是日志模版脚本log.conf : 我用SubversiongJ$P\"aB\
备份日志:
g8@2tCfu5Ru0在备份的文件夹中加上这四个文件,然后运行svndump.bat ,就会出现:学习,
f1Jl]O0Xuexi,学习备份,这3个版本库的备份文档,里面有下图所示的文件。
}4b*[Z&LT0我用Subversion3wl n*kw"Ya(n-T)R

"S4F3LsOV0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 319
  • 日志数: 4
  • 建立时间: 2008-02-20
  • 更新时间: 2008-03-03

RSS订阅

Open Toolbar