原文发表于cu:2016-05-24
参考文档:
svn服务器有2种运行方式:
独立服务器;(例如:svn://x.x.x.x/xxx)
借助apache。(例如:http://x.x.x.x/xxx)
此文档基于独立服务器部署,不依赖apache。
svn存储版本数据也有2种方式:
BDB;
FSFS。
BDB方式在服务器中断时,有锁住数据的可能,FSFS方式相对安全,本文档部署FSFS模式。
一.环境
Server: CentOS-6.7-x86_64
Server IP: 172.18.11.212
Client: Win7 x86_64
二.软件获取
Server
Client
中文语言包(版本必须匹配,否则语言包不生效,客户端设置中找不到):
三.安装svn
1. 准备
系统检查
#查看服务器系统是否已经安装svn#方式1
rpm -qa |grep subversion#方式2,查看是否有执行文件
ll /usr/bin/svn*
#方式3,如果有执行文件,查看版本
svnserve –version
依赖包
常规编译包
yum install autoconf libtool gcc gcc-c++ -y
openssl(optional)
#openssl主要在客户机上通过serf使用或在apache服务器使用。#检测
find / -name opensslv.h#如果找不到可以进行yum安装或源码安装(略)
yum install openssl openssl-devel –y
安装之后找到opensslv.h的所在目录,编译svn时使用" --with-openssl="带上路径。
zlib(必需)
#zlib主要用作svn的二进制差异算法,算法取决于zlib压缩。#检测
rpm qa | grep zlib*
#如果找不到可以进行yum安装或源码安装(http://zlib.net/,也可通过svn解压后的脚本获得)
yum install zlib zlib-devel –y
编译svn时使用" --with-zlib="带上路径(针对非默认路径的源码安装)。
2. 安装svn
解压
#将下载的subversion-1.9.3.tar.bz2放置于/usr/local/src目录,
cd /usr/local/src
tar-jxvf subversion-1.9.3.tar.bz2
cd subversion-1.9.3
配套依赖包
#在subversion-1.9.3目录内有1个可执行脚本get-deps.sh,可以下载版本相关的依赖包;#执行之后subversion-1.9.3文件夹多出了apr,apr-util,zlib,serf(与客户端通过apache服务访问svn相关),sqlite-amalgamation等文件夹,其中apr,apr-util,zlib是subversion必需依赖包,系统中可能已安装,但版本可能不匹配(尤其是apr,apr-util,所以使用此脚本下载的依赖包最佳)。
./get-deps.sh
apr/apr-util
cd apr
./configure --prefix=/usr/local/apr
make
make install
cd ../apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
编译安装
#不使用bdb方式,预编译时可能会有告警
cd ..
./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --without-berkeley-db
make
make install
环境变量
#将svn的命令目录加入环境变量
vim /etc/profile
export PATH=/usr/local/svn/bin:$PATH
source/etc/profile#或者采用软链接的方式将svn的命令加入到环境变量中,如下
ln -s /usr/local/svn/bin/* /usr/bin/
验证
#返回版本信息即成功
svnserve --version
3. 部署svn
创建版本库
#创建仓库根目录
mkdir -p /svn#创建版本库svntest,如果有多个项目可建多个版本库
mkdir -p /svn/svntest
svnadmin create/svn/svntest
版本配置库文件
#版本库svntest的配置文件目录
cd /svn/svntest/conf/vim svnserve.conf#取消general项目下如下几行的注释;注意:每一行的都要顶头,不能有空格,否则报错#27/36/47行可以使用相对路径(passwd/authz默认为版本库conf下文件,svntest为版本库svntest根目录),也可以指定绝对路径
19 anon-access = none #必须设置,否则所有用户不用密码就可以访问
20 auth-access = write
27 password-db = passwd
36 authz-db = authz
47 realm = svntest
用户配置文件
cd /svn/svntest/conf/vim passwd
[users]#harry = harryssecret#sally = sallyssecret
#设置登录账号与密码#对用户配置文件的修改立即生效,不需要重启服务
testuser = testsecret
权限配置文件
#除如下修改外,默认配置可不变
cd /svn/svntest/conf/vim authz#设置admin组,用户testuser加入admin组,1个用户组可含多个用户,用逗号隔离
[groups]
admin = testuser#设置admin组对版本库svntest根目录及以下有读写权限,也可以针对单个用户设置,如 testuser = rw
[svntest:/]
@admin = rw#权限配置文件中的账户必须已在用户配置文件中定义,对权限配置文件的修改立即生效,不需要重启svn服务
authz文件语法
用户组格式
[groups]
= ,
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔
版本库目录格式
[:/项目/目录]
@ =
=
其中,方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录在svnserve启动时指定的,[/]表示对仓库根目录有设置权限;
[版本库:/] 表示对版本库xxx设置权限,如上文指定的svntest版本库;
[版本库:/项目] 表示对版本库xxx中的某项目设置权限;
[版本库:/项目/目录] 表示对版本库xxx中的某项目的某目录设置权限;
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户;
权限可以是w、r、wr和空,空表示没有任何权限
启动svn
#-d表示以daemon方式运行;#--listen-port指定监控端口,不指定时默认是3690端口,通过端口可开启多个svn库;#-r指定仓库根目录,注意不是某版本库根目录,根目录的设置与客户端登录地址有关联,如果设置不当,可能会导致登录的诸多问题
svnserve -d --listen-port 5690 -r /svn/
#验证
ps aux |grep svn#停止svn
killall svnserve
开机启动svn
#注意修改shell中的相关设置,如变量SVN_HOME,端口等#请不要删除# chkconfig: - 85 15与# description: svn server,否则无法使用chkconfig加入服务,会提示service svn does not support chkconfig
vim /etc/rc.d/init.d/svn#!/bin/bash#chkconfig: - 85 15#description: svn server
SVN_HOME=/svnif [ ! -f "/usr/local/svn/bin/svnserve"]
then
echo"svnserver startup: cannot start"exit
fi
case"$1" instart)
echo"Starting svnserve…"
/usr/local/svn/bin/svnserve -d --listen-port 5690 -r $SVN_HOME
echo"Finished!";;
stop)
echo"Stoping svnserve…"killall svnserve
echo"Finished!";;
restart)
$0 stop
$0 start
;;*)
echo"Usage: svn { start | stop | restart }"exit1esac#赋予启动脚本权限
chmod 755 /etc/rc.d/init.d/svn
chkconfig--add svn
chkconfig--level 35svn on#也可以简单处置,如编辑rc.local文件
vim /etc/rc.d/rc.local/usr/local/svn/bin/svnserve -d –listen-port 5690 -r /svn
iptables
#打开相应的端口,保存iptables设置
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5690 -j ACCEPT/etc/rc.d/init.d/iptables save
四.客户端TortoiseSVN
安装TortoiseSVN客户端及语言包,访问路径svn://ip:port。
以下是简单的使用教程。
数据导入
选择本地需要导入到服务器端的文件目录,,右键—>TortoiseSVN导入,如下:
输入版本库地址,
首次使用需要输入用户名/密码,
数据检出
选择需要检出的目录,鼠标右键,SVN检出 -->导出
填写导出版本库URL与需要导出的目录,
更新与提交
如果版本有更新,选择相应的目录,右键-->SVN更新;
如果本地做了更改,需要上传到服务器,选择相应的目录,右键-->SVN提交。
建议每次本地要做更新提交时,先SVN更新到服务器端最新版本,在最新版本上做本地修改再提交。
添加文件/目录
如果在检出目录内新增了文件/目录,需要先添加,再SVN提交到版本库,如下,
如添加的文件符号变更如下,然后才能SVN提交到版本库。
删除文件/目录
如果需要删除服务器端文件/目录,不能使用本地删除,对删除的文件/目录,右键-->TortoiseSVN-->删除,回到上级目录,SVN提交。