Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2262793
  • 博文数量: 168
  • 博客积分: 6641
  • 博客等级: 准将
  • 技术积分: 1996
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-02 11:49
文章存档

2020年(4)

2019年(6)

2017年(1)

2016年(3)

2015年(3)

2014年(8)

2013年(2)

2012年(12)

2011年(19)

2010年(10)

2009年(3)

2008年(17)

2007年(80)

分类: LINUX

2011-05-18 21:20:21


构建SVN(Subversion)版本控制系统
 
2011.05.18 TsengYia#126.com http://tsengyia.blog.chinaunix.net/
 
#################################################################

系统环境:
    服务器 —— RHEL 5.5 [2.6.18-194.el5]
    客户机 —— Microsoft Windows 7

软件环境:
    服务器端(项目仓库),可从下载
    (1) SVN服务器组件、依赖包
subversion-1.6.16-1.i386.rpm              subversion-perl-1.6.16-1.i386.rpm
subversion-debuginfo-1.6.16-1.i386.rpm    subversion-python-1.6.36-1.i386.rpm
ssubversion-devel-1.6.36-1.i386.rpm       subversion-tools-1.6.16-1.i386.rpm
neon-0.28.4-1.i386.rpm                    sqlite-3.5.9-2.i386.rpm
neon-devel-0.28.4-1.i386.rpm              sqlite-devel-3.5.9-2.i386.rpm
—— 若要使用HTTP方式访问SVN服务,还需下载安装mod_dav_svn-1.6.16-1.i386.rpm,并配置httpd服务器。
    (2) 基本依赖包(来自RHEL 5.5系统安装盘)
cyrus-sasl-2.1.22-5.el5_4.3.i386.rpm      python-2.4.3-27.el5.i386.rpm
db4-4.3.9-10.el5.i386.rpm                 xinetd-2.3.14-10.el5.i386.rpm
openssl-0.9.8e-12.el5_4.6.i386.rpm        zlib-1.2.3-3.i386.rpm
perl-5.8.8-27.el5.i386.rpm

    客户机端(开发用机),可从下载
TortoiseSVN-1.6.15.21042-win32-svn-1.6.16.msi
LanguagePack_1.6.15.21042-win32-zh_CN.msi

#################################################################

一、服务器安装与配置

1. 软件包安装
    依次安装各种依赖包、SVN服务器组件(具体过程略)。
    —— 注意1:对于已装有低版本软件包的情况,如sqlite、sqlite-devel,可以采取升级安装的方式。
    —— 注意2:其中subversion-tools软件包依赖于perl的File::Path模块,实际上已包括在perl-5.8.8软件包内,若安装时出现“error: Failed dependencies: perl(File::Path)……”的依赖提示,则添加“--nodeps”选项忽略即可。、

2. 创建运行用户、SVN根目录

[root@localhost ~]# useradd -m -d /var/svnroot svnuser
[root@localhost ~]# chmod 755 /var/svnroot/
[root@localhost ~]# ls -ld /var/svnroot/
drwxr-xr-x 3 svnuser svnuser 4096 05-18 13:41 /var/svnroot/

3. 创建项目仓库

[root@localhost ~]# svnadmin create /var/svnroot/pbdevj         #//项目1的仓库文件夹
[root@localhost ~]# svnadmin create /var/svnroot/pbtest         #//项目2的仓库文件夹
[root@localhost ~]# chown -R svnuser.svnuser /var/svnroot/pb*
[root@localhost ~]# ls -lh /var/svnroot/pb*
总计 8.0K
drwxr-xr-x 6 svnuser svnuser 4.0K 05-18 13:48 pbdevj
drwxr-xr-x 6 svnuser svnuser 4.0K 05-18 13:48 pbtest
[root@localhost ~]# ls /var/svnroot/pbdevj/                     #//默认建立的子目录和文件
conf    db    format    hooks    locks   README.txt

4. 配置目录访问权限
    创建好项目仓库以后,每个项目的配置文件默认位于子目录conf/下。其中passwd存放用户帐号、密码,authz存放用户分组、访问权限等,svnserve.conf设置全局参数(如指定帐号文件、访问控制文件的位置等)。

[root@localhost ~]# ls /var/svnroot/*/conf/
/var/svnroot/pbdevj/conf/:
authz    passwd    svnserve.conf
/var/svnroot/pbtest/conf/:
authz    passwd    svnserve.conf

  (1) 创建共用的账号文件、访问控制文件、主配置文件
    若用户数量少、项目数量多,也可以共用账号盒访问控制文件,例如保存在/etc/subversion/目录下。
    pbdevj项目:允许用户xyzeng、abchen写入,tsengyia用户只读,禁止匿名访问;
    pbtest项目:允许tsengyia用户写入,允许匿名读取(仅作测试,不推荐采用)。
[root@localhost ~]# mkdir /etc/subversion/
[root@localhost ~]# cp /var/svnroot/pbdevj/conf/* /etc/subversion/

[root@localhost ~]# vi /etc/subversion/passwd                   #//共用的帐号文件
[users]
xyzeng = 123456
abchen = 654321
tsengyia = pwd123
[root@localhost ~]# vi /etc/subversion/authz                    #//共用的访问控制文件
[groups]
javateam = xyzeng,abchen
[pbdevj:/]                                              #//若为单库,则采用[/]格式即可
@javateam = rw
tsengyia = r
* =
[pbtest:/]
tsengyia = rw
* = r
[root@localhost ~]# vi /etc/subversion/svnserve.conf            #//共用的SVN主配置文件
[general]
anon-access = read                                      #//匿名访问建议设为none
auth-access = write
password-db = /etc/subversion/passwd
authz-db = /etc/subversion/authz
realm = Community                                       #//若多个库共用帐号,此名称应相同

[root@localhost ~]# chmod 600 /etc/subversion/*                 #//降低文件权限
[root@localhost ~]# setfacl -m user:svnuser:r-- /etc/subversion/*
[root@localhost ~]# ls -l /etc/subversion/*
-rw-r-----+ 1 root root 1189 05-18 14:14 /etc/subversion/authz
-rw-r-----+ 1 root root  359 05-18 14:13 /etc/subversion/passwd
-rw-r-----+ 1 root root 2350 05-18 14:15 /etc/subversion/svnserve.conf

  (2) 将主配置文件复制到每个项目仓库
[root@localhost ~]# cp -pf /etc/subversion/svnserve.conf /var/svnroot/pbdevj/conf/
[root@localhost ~]# cp -pf /etc/subversion/svnserve.conf /var/svnroot/pbtest/conf/

5. 启动svnserve服务器程序
    SVN的主服务程序为svnserve,默认监听端口为3690,选项“-d”、“-i”分别表示运行再daemon、inetd模式,更多选项请参考--help。
    若此SVN服务器并不许要频繁访问,建议选用inetd模式进行启动,可参考以下操作。
[root@localhost ~]# grep -i subversion /etc/services
svn              3690/tcp                #Subversion
svn              3690/udp                #Subversion

[root@localhost ~]# vi /etc/xinetd.d/svn
service svn                              #//服务名须与services文件中定义的相同
{
    disable          = no
    port             = 3690
    socket_type      = stream
    protocol         = tcp
    wait             = no
    user             = svnuser
    server           = /usr/bin/svnserve
    server_args      = -i -r /var/svnroot
}
[root@localhost ~]# /etc/init.d/xinetd restart
停止 xinetd:                            [确定]
启动 xinetd:                            [确定]


二、客户机端的使用

1. 软件包安装
  (1) 安装客户端程序 TortoiseSVN-1.6.15.21042-win32-svn-1.6.16.msi 。
  (2) 安装中文语言包 LanguagePack_1.6.15.21042-win32-zh_CN.msi 。
  (3) 重新启动系统,以便在资源管理器中应用SVN特有的标识图标。

2. 使用 TortoiseSVN客户端软件
  (1) 修改SVN的语言设置
    在Windows资源管理器中,任意空白处单击右键,可调出“TortoiseSVN”-->“Settings”设置菜单,然后将“Language”设置为“中文简体”,下一次使用时界面即变为中文。
  (2) 浏览项目仓库
    在资源管理器的地址栏访问svn://ServerIP/项目名称,例如svn://192.168.7.11/pbdevj,然后以授权的用户名认证即可。
    或者在TortoiseSVN右键菜单中选择“版本库浏览器”,然后输入上述URL地址,也可以进行访问。
    成功登录以后,可以对项目代码进行管理(如创建文件夹、删除文件、改名等)。
  (3) 导入项目代码
    访问指定的项目库,展开至指定位置,然后将需要导入的代码文件直接拖入即可。
    或者在TortoiseSVN右键菜单中选择“导入”,然后输入URL地址,验证后也可以执行导入。
  (4) 检出项目(Checkout)
    在本地新建空文件夹,右击后选择“SVN检出”,然后输入项目库地址(可附带具体子目录)执行检出。
    若需再次从SVN服务器中获取更新的代码,右击本地检出目录后选择“SVN更新”即可。
  (5) 检入项目(Checkin)
    修改文件后,右击此文件或本地检出目录后选择“SVN提交”即可。
  (6) 查看修改记录
    选中文件后,在TortoiseSVN右键菜单中选择“显示日志”,即可查看历次修改记录。
    —— 注意:若将项目库设为允许匿名read,查看日志时可能出现连接失败的情况,改为none后正常。

#################################################################
 
阅读(1539) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~