Linux系统下SVN服务器的搭建过程详解 UpJ}s7+

Linux系统下SVN服务器的搭建过程详解 UpJ}s7+  
 1 环境: 
  服务器放在redhatAS4.0上,客户端在windows 2000。 k_lb"5z  
Z]jSq@%1H*  
  2 软件包 yzLY{$.`  
F%z[TNs1yg  
  2.1 服务器: )pllEcC r  
DYW<h3S%  
r>@0z$  
V[J6,&#p  
8bd/XbPF  
QX@>SjY  
  subversion-1.3.2-1.rh90.i386.rpm。可能还会用到其他依赖组件,在我的配置中要用到:apr-0.9.5- 0.2.i386.rpm , neon-0.24.7-1.i386.rpm,apr-util-0.9.5-0.1.i386.rpm。 ~sj"wY`  
!8DO%(H{  
  2.2 客户端: bas5m6Y9  
@TL<)Ty{dR  
  TortoiseSVN-1.3.2.5840-svn-1.3.0 ]v`pe|CD  
hNR>h%9)  
  3 安装服务器 >=b'{CK  
"6n]3`<  
  [root@localhost root]#rpm –ivh apr-0.9.5-0.2.i386.rpm FSr|h[3v  
+X[B$ MP}  
  [root@localhost root]#rpm –ivh neon-0.24.7-1.i386.rpm 05FzBm%  
e<<.JP?x+  
  [root@localhost root]#rpm –ivh apr-util-0.9.5-0.1.i386.rpm ;rDi0dC  
/ x1' xla  
  [root@localhost root]#rpm –ivh subversion-1.3.2-1.rh90.i386.rpm UDd.X0*  
M#_ V-)  
  安装完成以后,要测试是否已经安装成功,则要输入以下命令: SzhP z`  
r/FHS*R  
  [root@localhost root]#svnserve –version 8t { ]*$N  
1MXwX2  
  若显示如下,安装成功: ^ACiCx  
OKOTB9  
  svnserve, version 1.4.0 (r21228) )>P vJ,du  
Dx"|VgT  
  compiled Oct 12 2006, 10:18:56 pO6 "j(7  
(yG/j  
  Copyright (C) 2000-2006 CollabNet. DJwLlIS  
Io%#`2 '  
  Subversion is open source software, see http://subversion.tigris.org/ e(EwP &Y  
#6 |8Pl  
  This product includes software developed by CollabNet (http://www.Collab.Net/). 8#1oO@nEU_  
13M}LyL=  
  The following repository back-end (FS) modules are available: D7gPQNI  
9^VpRLC  
  * fs_fs : Module for working with a plain file (FSFS) repository. 9zkC0Lu$X  
<oDl)D4  
  4 Svn配置 ?ST/ z(b  
uM=ya7  
  4.1 建立版本库目录 N*0-/SMKD  
=u;(]Ej8)  
  [root@localhost root] #mkdir –p /svn t?/=m-|*  
B Qo"Km~1  
  svn是我自己建立的目录,各人根据具体情况设计名字 C^ug<tBU>  
r}E e%Gv  
  4.2 建立一个用户,用与管理这个版本库目录 .jJV8lvA2  
{0_Y$F  
  [root@localhost root] #useradd -m -s /bin/bash lyl `,1?yz3a  
b{a@I/  
  lyl是建立的用户名,可以根据习惯改 |//%%gY5m  
X1 y"vi  
  4.3 用建立的用户管理我们刚建的版本库目录 G>JB&# !  
+ `(9E  
  [root@localhost root] #chown –R lyl.lyl /svn {,(6zmrh  
DE__ O{Yt  
  用lyl来管理我们的版本库目录/svn m4c/8  
iD .&jg+  
  4.4 启动服务器 >=p;Tt=^:b  
s/;Op  
  用用户lyl来管理版本库目录/svn,则须转为lyl,命令如下: ^pg`-&oj  
nI(~c4HT  
  [root@localhost root] #su lyl ep-4o!e  
:>ml|.y  
  启动svn服务 Zp.+@(x  
Ub7CXf  
  [root@localhost root] #svnserve -d -r /svn/; St^NiMlO4  
IDV%/ /  
  -d表示以daemon方式(后台运行)运行 oP!7+X |A  
DL W b  
  -r/svn/指定根目录是/svn/ Y`=+95I;w  
O3_xRP  
  检查服务器是否启动正常: m0z; ns  
z5f$o6gbhg  
  [svn_leader@localhost root]$ ps –ef|grep svnserve R'}B!W  
_21*L2dy  
  如果显示如下,即为启动成功: Wt-&# X  
G,Rx:_aMvY  
  lyl  6941   1 0 15:07 ?  00:00:00 svnserve -d ——listen-port 9999 -r /svn yM2!5}K  
 5 建立版本库 V<8gy:  
e*N/yd3n  
  [root@localhost home]# cd /svn *'amMG'P  
_|=H7Bvb  
  [root@localhost svnrepos]# svnadmin create p1; tk8!Ix1  
^$x0Y~l%  
  P1可以改,在p1目录下会有下面目录:conf dav db format hooks locks README.txt 6eXg8lP@  
CHeTu*C0  
/W `,VQJ  
psz`raX  
&_ imcpA}  
Y%Znir0>`>  
  6 配置允许访问test的用户 ,"#22O'  
p1UE_iC  
  进入到conf,命令为: 4(EBW  
7:e>B8I  
  [root@localhost safety]# cd conf (wo!~}  
0M()+@eo  
  出现三个文件:authz passwd svnserve.conf prn/L5zz  
/ oa  
  6.1 修改svnserve.conf v(@'r3q  
c~|gIt /E  
  [root@localhost conf]# vi svnserve.conf -=*E=j4Q  
KT#=*&d`N  
  出现: Ib5|dfba*  
QXLL_meh  
  [general] 97zZT  
8.EVId,3  
  ……………………… '[Df @`Z  
0di SS-  
  # anon-access = read XhQ_{ XY  
~/Xw&jw de  
  # auth-access = write FFxL'4A  
2z..S  
  ……………………… /_m[RzVfJ  
7g10eW  
  # password-db = passwd @0t#(T+*  
7c(EoW  
  ……………………… W<s=T< M  
iu@hD$  
  # authz-db = authz 9l[}ju#q  
+U|SE(P=5  
  内容修改为: V?; 29w3  
<NcXky Ce  
  [general] p[ 4;A9E^k  
c~kJ&o@6v  
  ……………………… MA u<vw  
5/SH2  
  anon-access = none s;].# C  
n`7/=d  
  auth-access = write #hU @QeS%  
7|A^g|Z  
  ……………………… ^l^}uNE  
c]d @#2,  
  password-db = passwd jzs8P4@ o  
, _n`:Fu  
  ……………………… <6aQ]3~Bc  
KL,[@0qs  
  authz-db = authz Ir1xj>  
"I~3(ePn  
  6.2 修改passwd HC2k,CwS$  
/`Odo LL(  
  [root@localhost conf]# vi passwd QQb;n6L  
Q@'&;  
  文件格式如下: >? H3tT~^  
iAA/o)  
[users] 8HU;( '  
=K yMY!]z  
<用户1> = <密码1> yI1a.TLY_*  
e<(=Do|<B  
<用户2> = <密码2> vb,#|  
aFkd~M  
 其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例: 3&][EL>  
i|Oi bL+  
  [users] D)N9qJ.[#  
/dcL-3]  
  alan = password 2KdWJ &I  
,Yyws UO  
  king = hello bvvE$J  
gTw:qSYhz  
  这个里面的user表示当前test版本库的成员. IdWJG/@  
L<8-174tt  
  6.3 修改authz |c#/yju':  
$VIlQ!cu  
  [root@localhost conf]# vi authz !k3YYb|xP  
TW8Uak8_  
  用户组格式: 8_[K>aZ  
w-* {B{h  
[groups] a*7Vkb3  
JZk3T  
<用户组名> = <用户1>,<用户2> 2i^ &^f^  
?Gd3[]K>  
  其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。用户必须要在passwd文件里能找到,它是给那个里面的user赋权限. q "5;P-?  
zP_#k]Q=  
  版本库目录格式: VNY:e2'u@  
vA^>@5+`M  
[/目录] e( eX$MQN  
I/kW B=  
@<用户组名> = <权限> )o-sxyibI3  
Z;OUt9t  
<用户名> = <权限> S=$hw:eH J  
!H{l=  
  示例: M1<,G?dm"  
/,,&N'jj  
  [groups] & HjH3A>  
-H.lR_6{  
  admin = alan 5be|/aR=  
s.}~>N#L  
  [/] m_v:C[~  
=+{* [6  
  @admin = rw E j"@T9C  
_|)(bp3_  
  [/svn/p1/WebProject] .skKE 5dj  
y|)q1B=j(  
  king = rw(表示king能够读写/svn/p1/WebProject目录下的所有信息) ;/4l()(9l  
v']"a|T  
  [/svn/p1/web] yh D.-*`r6  
< 18t; N  
  zp=r(表示zp能够读/svn/p1/web目录下的所有信息) )Pj>j/CBP  
l|E4$tA;  
  到此svn服务器的的安装和配置就已经完成了。 W+vXmvK  
网上看到的教程,拿来学习一下: JT1^ :@  
Sb eY)  
简单的说SVN是一个GPL版本控制软件,其创始人是从CVS项目中出来了,其目标就是替换掉CVS,SVN尽力维持CVS的用法习惯,并增加了一些很方便但CVS做不到功能,如目录改名等。笔者使用了两个月的SVN后,感觉SVN确实做到了。 u;uWjC%  
|DUg [32  
SVN简介及使用说明 1bX/&^R  
>T:ouc|w<  
作者:mirclle ns~<%~&q  
@[$g#  
一、概述 !F]W9 B>  
^'a*v,c3  
简单的说SVN是一个GPL版本控制软件,其创始人是从CVS项目中出来了,其目标就是替换掉CVS,SVN尽力维持CVS的用法习惯,并增加了一些很方便但CVS做不到功能,如目录改名等。笔者使用了两个月的SVN后,感觉SVN确实做到了。 XcxiT1LO:  
z`#N- cX  
二、SVN能够做什么 (F wY}  
PH.INjYH  
1、从CVS继承的功能 9S!"MmZ3  
sJNgFcrqQ  
(1)、程式码版本的存储与维护 3Z%N',ER  
rD 9Yc]y6  
(2)、程式码版本的追踪回溯 Hnqe&9Gu  
y$efq8LG  
(3)、程式码版本的分合控制 +U sR2o/  
whNXsZg  
(4)、职员多人合作开发专案 k|mPtV  
L'3> S}  
(5)、程式码远端管理维护 qyJfij  
kX wZmCmt  
(6)、程式码匿名截取 JLwO JeY  
/kpt f'  
2、在CVS基础上增添的新功能 l[;3PFr  
GgU0Z>]@+f  
(1)、目录版本控制,目录更名 "@Qo}{:  
KR:wlSx~  
在CVS 中,一个目录是没有版本历程的,假如原来一个名为doc/的目录,在经过一段时间之后,发现它应该要称为manual/比较恰当,此时我们只能建立一个新 manual/,把doc/目录下的档案复制过去,把manual/下的档案新增至CVS系统中,再把doc/删除。而且必须注意的是,在档案的复制与删除过程中,我们也同样地遗失了这些档案的历史历程。版本控制最主要的资料就这样丢掉了。 sT>ggr|F  
eIuU"7  
但是在SVN中,目录与项目文件同样都是纳入版本控制之中。也就是说,我们可以随时要求SVN将某个项目文件恢复到某个时间点的状态,也可以对目录进行更名的动作。 q fC%l@i  
>aNs(H[  
(2)、对多个项目文件进行不分割送交 2yZr"KW  
*4^ m  
在CVS中,虽然我们可同时对多个项目文件进行送交,但是CVS并不保证一次的送交是不可分割的,而SVN的送交就没有这个问题。送交的结果不是全都进系统,就是全都没有进系统,不会只有一部分及系统的状况。 MpmE<F#  
;Ah8B,6_q2  
(3)、更佳的二进制资料处理 Y_AwnW  
sy]&U^$R  
首先,SVN不主动更动项目内容,除非使用者加上这样的设定。再者,它使用可适用于文字与二进制资料的内容差异演算法,在项目储存上,文字与二进制资料都具有相同的优势。现在,不只是文字资料适合置于版本控制系统中,连二进制资料也可以很方便地放进来。 zuDRLF5o+  
&R4l|Uz),6  
(4)、高效率的分支与标记 xjENX5K/  
mITMs-Z_n  
在SVN系统的标记是以目录的副本的方式建立的,而副本是以类似链接的方式来建立。也就是说,不管涉及的目录与项目有多少,它所花费的时间都是固定的,不会因为档案越多而耗时越久。同样的,SVN的分支也是以目录的副本来实现的。 $qh0fEG{/0  
U|Jg?; L  
注释:1-6条是SVN继承了CVS的特点,因此,在这里不再进行详细的描述。7-10条为SVN在CVS基础上增加的新功能。 其他详细内容请参考关键词(SVN CVS SOURCESAFE 版本控制 源代码管理)。 ^p|#Q7&A  
N-"I/Sv  
三、名词解释 ^{y#<iA'  
xL#XM#f!!  
1、Check out——从服务器端取得代码 R KZXR<(H  
GzG#@Rp"KS  
把服务器资料库里存放的某个项目代码取出来,放到本地主机中,这个动作叫做“check out”。使用具体步骤:进入要安装项目文件的目录中,点击鼠标右键,选择SVN Check out项,然后填写项目的原始路径和安装路径后点击“ok”即可。 a/}xl lV  
@'w/`[  
2、Update——更新项目代码 M}^` U$  
/Q pB8|l  
以前checkout过的一个项目代码,当服务器上有了更新的代码,或者本地代码损坏或丢失,update可以自动判断本地哪些文件较旧,或者缺少,都会自动更新。当然,你也可以删除掉本地代码,重新check out。使用具体步骤为:在要更新的项目上点击鼠标右键,选择“SVN Update”项即可。 ~@59-9"1  
c /*r.TFc  
3、Commit——将本地代码上传到服务器 |S4).3qQ  
C&r}Yp071  
当修改(增加,删除,修改等所有写操作)过本地代码后,这个动做会把新代码提交到SVN。如果本地代码做了修改,不执行commit操作,SVN服务器上是不会有这个新版本的,也就是说其它人也得不到。对代码做过修改后,应尽快commit。使用具体步骤:在修改完待上传的项目上点击鼠标右键,选择“SVN Commit”项即可。 2 9ebN &+?  
(=y/Ka(;S6  
4、Export——将项目导出到本地 >oSkp(  
+CR}g  
如果想要得到一个完整的项目,且不需要再进行版本的改动,可以直接把该项目导出版本控制系统,成为一个普通文件进行使用。具体步骤为:单击鼠标右键,选择TortoiseSVN——>>Export项,然后填入要导出的项目既可。 b-TIvKc  
A_GJ#L4  
5、Show Log——显示所有版本 2 >v'-  
gDe3}KDwQ  
如果项目成员想查看本地下载的属于版本控制内的某个项目以前的所有版本,就在该项目上单击鼠标右键,选择TortoiseSVN菜单下的Show Log项。则该项目的所有版本及其每个版本的修改信息都将显示在出现的新对话框下,供项目成员进行参考。 jJgY..2'  
@LJ(ARG/  
6、Update To Revision——恢复到某个版本 i.CWvyeU  
m9pc9_ }d  
当项目成员想要把某个项目恢复到以前的某个版本时,在该项目上单击鼠标右键,选择TortoiseSVN菜单下的Update To Revision,于是,在出现的Update对话框中可以先点击“Show Log”来查看及确定要恢复到的版本号,或者直接将要恢复到的版本号填入“Revision”旁的编辑区内,最后点击“OK”。于是,该项目就恢复到想要的项目版本了。 /BjIoai^s  
!dZ8K85  
7、Add——增加文件 Yu BWR !  
IoI+2/C  
当项目成员想在项目中添加一个新文件时,请把该文件先拷贝到项目文件加下,然后,在该文件上单击鼠标右键,选择TortoiseSVN菜单下的Add项,于是,该文件就可以被添加到项目中了。 fekl"=@  
.m_L U  
四、高级特性 HUT T_  
8?az17  
1、Update to revision 8W6Z*apf  
v/V m<  
Update默认更新到最新版本,update to revision则可以更新到指定版本(可以是更旧的版本)。 $!1i[rr(&  
~3l1U '  
2、增删项目文件及目录的操作 u_<Fepb9  
`&=o%7c  
增删项目内文件或目录,请一定使用svn add ,或svn del 或svn rename,然后做commit操作 7EKRVg>  
`9>4|  
Xy# |f|  
上文来自于:http://mirclle.itpub.net/post/7306/40790 ZvmD,F%Db  
&G)@/Hw  
/V Oq`^CZ>  
8%} $:<Zw  
客户端svn的使用 &Jt<|r9x  
}. E?Q1  
这里只是记录Linux下命令行客户端svn的使用。 4A,fnCN  
a` ZKF  
1. 第一次导入本地文件到SVN a LjA(:th  
首先你的本地projet应该有文件夹branches, tags, trunk(为啥我暂时不知道) xk/qWH(.2  
然后导入: Dq!v*:y M  
}5T %  
svn import /your_projec_path file:///svn_project_path -m "initial import" X xwn//R  
u'm! a1  
2. 取出工作拷贝 MP2l.9 M  
0d}$V+  
svn checkout file:///svn_project_path /your_local_file_name N&uK_MG  
nt` */  
最后一个参数为下载下来的文件名字,随便起都行。 |Z]D/"d  
wMudQE39  
3. 常用命令 'ON} 9pR  
I;f*  
在checkout了拷贝之后,拷贝的目录下面有一个./.svn目录,里面记录了相关信息。 9A:W.3.M(p  
/';xn; $  
svn diff : 检查本地拷贝和svn中的文件的区别 }'R H(YZ7  
svn log : 列出修改日志 |C<a~J}k#  
svn add : 把文件和目录放入版本控制中,会在下一次提交的时候加入 &Lc3~&EJ/  
svn update :更新你的拷贝 Y#0kN/8S15  
svn commit :提交你的拷贝 }gt7I4  
q9@UT DaZ  
省下的直接 svn help command 来查询好了 [D+xaN`E6P  
CCq@*EN  
4.典型的工作周期是这样的: }P 1y{x?  
|?7xV  
* /J.Q/ @  
wt|(v  
更新你的工作拷贝 _&gb{d}D  
o vT .DJV  
Os.Rn7~  
svn update ux 1~(F  
* ]7_=6YRu|  
HqlcU~  
做出修改 zg%3_t/?I  
o SytE`>?]`  
q@v*_yZ  
svn add JN@xs3c3  
o 8YWgnx|6  
-NaCK/?]  
svn delete |l~,0P  
o 6w)kz"  
q i'1?I`  
svn copy /BS7jJx,  
o Y/C%o?x$fY  
g3v(8*2q  
svn move Mz>L6 u  
* |cqD3|@rqt  
v@gq<Z  
检验修改 ][?o-#'(  
o x&4(Fp8j-  
(Dj&@4  
svn status d=rlBz;s  
o P: 9u  
_MyB d  
svn diff |H 'Ch28[M  
o ;vG/L}  
Xb5g&uPcV<  
svn revert F|mpO;^SW  
* Q]<.%sbY  
pb)|u  
合并别人的修改到工作拷贝 cUtPyqY&  
o u1:~hI0O.`  
hxSZ"~6D  
svn update {_]/uB  
o `&vTONW,f  
Gyorj %  
svn resolved U%3 MJQ h  
* -W 5nkr  
[^/se~Ctq  
提交你的修改 clcHl<t !  
o wmWH:a  
SD'RKTDPV#  
svn commit {|+o|{1*  
)L7G_T(ZwK  
以上是基本入门的东西,复杂的合并什么的慢慢研究。 .vKyl8M  
Qt*xH1H [7  
J.&fJ:Z  
svn命令 通常都有帮助,可通过如下方式查询: k .59G`  
$//+Ha[~  
$ svn help HCZ-lG)$  
}eyb-C/  
知道了子命令,但是不知道子命令的用法,还可以查询: }2B*R g6M  
Plt"S8g'  
$ svn help add D~dnTgV  
wF=*@aXNJ/  
Gp.h .o  
开发人员常用命令 KFJIg?=  
lP2wX6  
(1) 导入项目 be"/m Op  
l# vd|!q  
$ cd ~/project nJB ERIk&z  
$ mkdir -p svntest/{trunk,branches,tags} X)EbhZB^A  
$ svn import svntest https://localhost/test/svntest --message "Start project" IK z/pvs  
... O<50a(%JK  
$ rm -rf svntest ?!PAc0  
: ]Pdn86F  
我们新建一个项目svntest,在该项目下新建三个子目录:trunk,开发主干;branches,开发分支;tags,开发阶段性标签。然后导入到版本库test下,然后把svntest拿掉。 SEfu@*Rr  
#H}WO m4  
(2) 导出项目 3'UUZx f t  
ry&8bq1  
$ svn checkout https://localhost/test/svntest/trunk ]7yc;c  
GuE}#@HSH  
修订版本号的指定方式是每个开发人员必须了解的,以下是几个参考例子,说明可参考svn推荐书。 f:&> H0K  
8 M2/%^,+  
$ svn diff --revision PREV:COMMITTED foo.c vwP>q  
# shows the last change committed to foo.c 35v)m?Q1  
v=?'GT{  
$ svn log --revision HEAD #"`:W!"  
# shows log message for the latest repository commit (NQ[8tn  
+VByf/  
$ svn diff --revision HEAD pKa>,vS<!)  
# compares your working file (with local changes) to the latest version BK8eHQ7l  
# in the repository c`MFKQ4Pu  
3oc@4/IB!  
$ svn diff --revision BASE:HEAD foo.c )_{_HCMU  
# compares your “pristine” foo.c (no local changes) with the ;sYP<]<xT  
# latest version in the repository 8e YuO?~  
[LtJ6> Q2!  
$ svn log --revision BASE:HEAD mx^CKOh2j  
# shows all commit logs since you last updated ?jEgR:  
ZN6 4Lu(  
$ svn update --revision PREV foo.c 'U-OAzZh<  
# rewinds the last change on foo.c k8aJ+c`o  
# (foo.c's working revision is decreased) wW,_sMV`  
HesH;R1h  
$ svn checkout --revision 3 J sz@Pr-R  
# specified with revision number yN9M5rKq  
(iDS@UN7  
$ svn checkout --revision {2002-02-17} C://UbH!m  
$ svn checkout --revision {15:30} I/'j>,C  
$ svn checkout --revision {15:30:00.200000} 2Z/m" x9  
$ svn checkout --revision {"2002-02-17 15:30"} +H]Fwv  
$ svn checkout --revision {"2002-02-17 15:30 +0230"} J)k,lvgu  
$ svn checkout --revision {2002-02-17T15:30} khHi*{Te  
$ svn checkout --revision {2002-02-17T15:30Z} ;cpAO&s3  
$ svn checkout --revision {2002-02-17T15:30-04:00} Eyr&= ]=  
$ svn checkout --revision {20020217T1530} ,;r,D}KW  
$ svn checkout --revision {20020217T1530Z} 8A $^ ha[Q  
$ svn checkout --revision {20020217T1530-0500} `je&FEa[y  
i0N ;  
(3) 日常指令 +r%z`up2  
vj<<:$_  
$ svn update ^I LFj Y  
8$Pok0J  
$ svn add foo.file ,!N9 3%I@>  
$ svn add foo1.dir ep2=$kk|  
$ svn add foo2.dir --non-recursive Pyp} -.~?  
$ svn delete README MrC  
$ svn copy foo bar 1%cdrWY+  
$ svn move foo1 bar1 |Y{Lj27T  
>_ernDq  
$ svn status ]f+V`2BcO  
$ svn status --verbose %FII:W%i"n  
$ svn status --verbose --show-updates /:GH^Mn  
$ svn status stuff/fox.c 8/T>mtYm  
)BuMX[0KI  
$ svn diff VP<qz'e  
$ svn diff > patchfile .$cG@SHD<{  
vx+k9^78  
$ svn revert README et9|E>=9  
$ svn revert FE]{WnJ  
? `1QL"Bf  
修改冲突发生时,会生成三个文件:.mine, .rOLDREV, .rNEWREV。比如: 8xH#~Ck  
- lXQ_o  
$ ls -l qc 5Z> tw  
sandwich.txt eW*jEJ  
sandwich.txt.mine [3,abw  
sandwich.txt.r1 &b-$@>h&  
sandwich.txt.r2 ]o!)tVch  
m86*J=  
解决修改冲突方式之一:修改冲突的文件sandwich.txt,然后运行命令: &B%x.!D  
waY~ZrG.  
$ svn resolved sandwich.txt i/QifTH_  
;]R@!LapR3  
方式之二:用库里的新版本覆盖你的修改: P(I)U mp  
U8s6"=7  
$ cp sandwich.txt.r2 sandwich.txt bQVFi/r  
$ svn resolved sandwich.txt ~xr[^  
4Bfzx+E  
方式之三:撤销你的修改,这种方式不需要运行resolved子命令: pHUF;#"  
:-/ ,9^-5V  
$ svn revert sandwich.txt UM^< Djou  
Reverted 'sandwich.txt' F*UW9|uj  
$ ls sandwich.* }}Rd tM  
sandwich.txt Keg*'!%LF  
tyY^o)+r  
确保没问题后,就可以提交了。 Ld]P.!:  
fJzV&UH  
$ svn commit --message "Correct some fatal problems" 4$Cq^![  
$ svn commit --file logmsg P >Rg2QX  
$ svn commit cbs1y s-  
pBKQz$~qo*  
(4) 检验版本历史 2K, =}~  
J`u+iY9  
$ svn log 6j*-fhuH.  
$ svn log --revision 5:19 g'0ux4/x  
$ svn log foo.c YnwM cp2b  
$ svn log -r 8 -v TlWul5fa  
[)uAvk  
$ svn diff <fD[NkL  
$ svn diff --revision 3 rules.txt :28e>J  
$ svn diff --revision 2:3 rules.txt 2 yyT=M%O  
$ svn diff --revision 4:5 http://svn.red-bean.com/repos/example/trunk/text/rules.txt ?E`KRcm$ r  
6DayqW4 M  
$ svn cat --revision 2 rules.txt OP<D3<C  
$ svn cat --revision 2 rules.txt > rules.txt.v2 ,"`#Fvu  
_0)'M"_av  
$ svn list http://svn.collab.net/repos/svn x qJTf  
$ svn list --verbose http://svn.collab.net/repos/svn D;f >F  
*C-{bWHr  
$ svn checkout --revision 1729 # Checks out a new working copy at r1729 G8!,)Z!nI  
~1N94+R:  
$ svn update --revision 1729 # Updates an existing working copy to r1729 +%&S#h  
'$h'^  
@_h8esUr8  
(5) 其他有用的命令 &S!f2i)@  
0l QA J  
svn cleanup {y4(%6Y  
>H$ Mn;k  
为失败的事务清场。 *p`~%>)  
=s$aHuA  
(6) 分支和合并 '!hir/w_[  
R]n&(#  
建立分支方法一:先checkout然后做拷贝,最后提交拷贝。 >2FT5i28z  
fo(ne 5  
$ svn checkout http://svn.example.com/repos/calc bigwc AFmimi  
A bigwc/trunk/ =uShn:9xY  
A bigwc/trunk/Makefile }M3. u$@L  
A bigwc/trunk/integer.c +#zWL3V7  
A bigwc/trunk/button.c VPnRGKLoo  
A bigwc/branches/ Kr ]E8d`G  
Checked out revision 340. :lXOuCw>J  
1gwjB>[+!  
$ cd bigwc =bm  
$ svn copy trunk branches/my-calc-branch eWNBV[ M>  
$ svn status $B=i7/&  
A + branches/my-calc-branch n/_3U>M%j  
isjF@$'r  
$ svn commit -m "Creating a private branch of /calc/trunk." d$w^k1/h  
Adding branches/my-calc-branch cYsORWLn  
Committed revision 341. n!uIVdIv  
ipD`)oo  
建立分支方法二:直接远程拷贝。 RSo_kHb  
*0z{[N  
$ svn copy http://svn.example.com/repos/calc/trunk / i6Wms gqH  
http://svn.example.com/repos/calc/branches/my-calc-branch / @Y1uqQ|  
-m "Creating a private branch of /calc/trunk." k;y Q8  
<RhQIGZj  
Committed revision 341. HLy -0N*  
8%_LKxNOT  
建立分支后,你可以把分支checkout并继续你的开发。 alA@  
$, 2d7{G  
$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch 1hcoyWD  
jk}6)K  
假设你已经checkout了主干,现在想切换到某个分支开发,可做如下的操作: [IL 47  
?as4 J@ [I  
$ cd calc ^?=W3 c}10  
$ svn info | grep URL K7D#,hp3  
URL: http://svn.example.com/repos/calc/trunk =/~Tzo  
$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch YXn}<%}9  
U integer.c }P)=&)r8Z  
U button.c .W,26 /  
U Makefile 6S' JjT]y  
Updated to revision 341. h+vq{w  
$ svn info | grep URL iq9->< h  
URL: http://svn.example.com/repos/calc/branches/my-calc-branch :c"r:Ge'  
4,}7fS}n9  
合并文件的命令参考: ]o,wX nLp  
]t {tNnF  
$ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk p`D;3fX  
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk PF@=r  
$ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk." 6pq4Hok^6<  
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk my-calc-branch i-*R!,FI  
$ svn merge http://svn.example.com/repos/branch1@150 / "r^`@ ;<  
http://svn.example.com/repos/branch2@212 / ]I}F <3N  
my-working-copy _~HZ[  
$ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy B-D$8X3  
$ svn merge -r 100:200 http://svn.example.com/repos/trunk RO!Y 1?&  
$ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk qIo6OpfK  
^rY|84#  
最后一条命令仅仅做合并测试,并不执行合并操作。 e>c2DPyK  
*e0'!Ow  
建立标签和建立分支没什么区别,不过是拷贝到不同的目录而已。 c"|@hA=Vs  
8t)Zaa;h  
$ svn copy http://svn.example.com/repos/calc/trunk / sLOUidz  
http://svn.example.com/repos/calc/tags/release-1.0 / +~Jr6A"EB  
-m "Tagging the 1.0 release of the 'calc' project." #udGeQlp  
_' ;@^;,  
$ ls o.PF%t0*  
my-working-copy/ zI|Ht5h1C"  
$ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag ]6/k x^P  
Committed revision 352. ~&1&NP&}  
l `f5oH"Z  
后一种方式直接把本地的工作拷贝复制为标签。 )q/5|{ KS  
0J]lJAz,  
此外,你还可以删除某个分支。 QJTlKC*U  
GsNN4?h  
$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch / &kgOZX'o8  
-m "Removing obsolete branch of calc project." kN,'#  
G kNA}`H  
管理人员常用命令 EYu'D  
,ACi 8V.!#  
(7) 版本库管理 NAt&CpJ%9  
g-$G)[Uw  
$ svnadmin help 2+lw'xz  
... r2^8oOK=C  
$ svnadmin help create FW;$u0  
... 0Z9(s5X4  
$ svnadmin create --fs-type bdb /usr/local/repository/svn/test G~A#Td`  
$ chown -R svn.svn /usr/local/repository/svn/test Q!7Gk28C+  
SI8f;?d"  
建立版本库,库类型为bdb(使用Berkeley DB做仓库),库名称为test。 JW1fk{Ye  
svn版本库有两种存储方式:基于Berkeley DB(bdb)或者基于文件系统(fsfs),通过 --fs-type可指定存储方式。 ]zZ0=|WGT  
SMRSiLDH  
(8) 查询版本库信息 U"p,./  
StM2h&o  
$ svnlook help )+(&f%{c  
... AF hY#^  
$ svnlook help tree n<c)Fza{  
... $ jc,:0sSO  
$ svnlook tree /usr/local/repository/svn/test --show-ids w(AlW2  

 

subversion+apache

linux下svn服务器端+apache安装文档2007-10-19 04:26 P.M.1.下载subversion和apache的最新src包 &H~(C:~/  
2. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作 4Ets|YClU  
#groupadd svn A75)%wTdL  
#useradd svnroot -g svn N E1@rgBfU  
#passwd svnroot _b?(n#S  
3. 编译安装httpd: 2zqu#K5  
//解压apache2安装包 ^!%} R":  
# tar xvzf httpd-2.2.3.tar.tar "["& j/i  
//进入解压后的目录 bnt?g+ N'  
# cd httpd-2.2.3 Flb&77> 8~  
//配置apache安装 ,GmTC @j]  
# ./configure --enable-dav --enable-so --prefix=/usr/local/apache2/ S/z,Dmt  
# make A[M5g#Q  
//安装 3t`D*AH-#6  
# make install }h#]Vu  
//启动apache服务 - y@?pqx h  
# /usr/local/apache2/bin/apachectl start 2VWd(!l  
//打开浏览器http://localhost/如果有测试页"It works!"出现则证明已经安装成功。 (P{)SST  
XQAp8e5I  
4. 安装Subversion lGd[<14LO  
//解压SubVersion安装包 q"`6EYM?  
# tar xvzf Subversion-1.4.0.tar.gz wy;!CMl%  
//进入解压后的目录 u QBRd;2t  
# cd Subversion-1.4.0 vrbchL a  
//配置subversion安装 3$P};nYin  
#./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib --enable-maintainer-mode GSi=V  
# make 4cv OvP  
//安装 )9dFxa ]f  
# make install zpA=A,?9{=  
//创建库文件所在的目录 (svnroot用户进行下面的操作) d.NthfY  
# mkdir /home/svnroot/repository tyGS&]:+p  
//创建仓库"test" Rbk[d%  
# /usr/local/subversion/bin/svnadmin create /home/svnroot/repository/test z+Yb&FZ'5v  
//查看svn是否安装成功 o{RS B7  
# /usr/local/subversion/bin/svnadmin --version F{0;s/%0  
//不让其他人有该目录的权限 73B?iE"/  
# chmod 700 /home/svnroot/repository un# FuKi  
(svnroot用户操作结束) &>t4P4^i  
Id2I9[t  
5. 修改Apache配置文件 9g Y FZ  
# vi /usr/local/apache2/conf/httpd.conf ?Wz '14e  
//找到下列语句,如果没有则自行添加 =|m@I5  
LoadModule dav_svn_module modules/mod_dav_svn.so #KW H/d|  
LoadModule authz_svn_module modules/mod_authz_svn.so vtf-hpO  
//在后面添加 ah0/xWT+  
<Location /svn> Er6W~3_~^  
DAV svn e XI#Q  
SVNParentPath /home/svnroot/repository/ //svn父目录 AKb/>?,N  
AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件 .U+ bZ-  
AuthType Basic //连接类型设置 +O|3  
AuthName "Subversion.zoneyump" //连接框提示 K!3{~rO  
AuthUserFile /home/svnroot/repository/authfile //用户配置文件 ?!/3RTQV  
Require valid-user //采用何种认证 e#<X>f.  
</Location> x[$")Sbb  
hVCW5 9  
//重启apache j'Qy@ON}  
# /usr/local/apache2/bin/apachectl restart LX7U6 D}q  
//打开浏览器访问http://localhost/svn/test/,如果有东西显示就说明成功。 +:V#I{  
/:DC e$r  
6. 权限管理 / EZ?x4  
1)增加用户 BpA0"P)  
# htpasswd -c /home/svnroot/repository/authfile 用户名 F>uNT 5&>  
//第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加 16gvVoGQ  
# htpasswd /home/svnroot/repository/authfile 用户名(加入新的用户,就不用-c了) /&D6.F|  
7Z7)gV  
2)权限分配 1r!uM  
# vi /home/svnroot/repository/authz.conf hl+8  
[groups] RxYe_3#V  
admin=useradmin vH#VX7mw  
devteamcs = useradmin,user1,user2//这里定义了一个用户组 iM_BaSKG3  
[/]//对所有的项目,所有的用户都有读权限,admin用户有读写权限 @g3CiD,'y  
@admin = rw !uEj(&!.  
* = r +#OR+tTJ  
[test:/]//对test项目, H.G~l|/  
@devteamcs = rw e^gXF  
// 在 /usr/local/apache2/conf/httpd.conf 文件中配置,找到文件中的这两行: Ix~xi}ROZ  
User daemon #qW{ :  
Group daemon dc_*}/  
// 将daemon改为svnroot,组也做相应更改,让apache进程以svnroot的身份运行 oH]qd|  
//改完后是这个样子 X?lne63o  
User svnroot 2:V H$R O  
Group svn m_GUM3%.7z  
//重启apache `B]j%cu&  
# /usr/local/apache2/bin/apachectl restart F`.u.v  
访问http://localhost/svn/test ,现在需要身份验证,且通过验证后应该可以看到信息 {#`/1,A  
补充:在xp的环境下,如果你运行着卡巴斯基,可能会导致无法访问svn,通常会报400 Bad Request错误 Vg GN 3UGO  
解决办法是:进入卡巴斯基的设置-->网络设置--->端口设置,然后从端口列表中去掉80端口即可 B1tK`9d(C/  
再次补充:eclipse有svn的插件,subclipse,安装路径为:http://subclipse.tigris.org/update U;rE61'%l  
!s XjA,d$}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值