SVN代码库创建

检查是否已安装

代码片段
1 行
rpm -qa subversion

安装SVN服务器

代码片段
1 行
yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql

验证安装

代码片段
4 行
# cd /etc/httpd/modules
# ls | grep svn
mod_authz_svn.so
mod_dav_svn.so

查看版本

代码片段
1 行
svnserve --version

代码库创建
安装完成后要建立SVN库

代码片段
2 行
mkdir -p /opt/svn/repositories
svnadmin create /opt/svn/repositories

执行后,自动建立repositories库,查看/opt/svn/repositories文件夹包含了conf,db,format,hooks,locks,README.txt等文件,说明一个SVN库已经建立。

配置版本库
进入上面conf文件夹下,进行配置

用户密码passwd配置

代码片段
1 行
vi + passwd  //+表示光标放在文件最低端

修改passwd为一下内容

代码片段
3 行
[users]harry = harryssecret
sally = sallyssecret
zhoulf=123456

权限控制authz配置

代码片段
1 行
vi + authz

设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

JSON
3 行
[/]
zhoulf=rw  //给该用户访问所有库的权限  或 [repositories:/project]  //repository库的根目录权限 zhoulf=rw
/ 表示根目录及以下,根目录是svnserve启动时指定的,我们指定的是/opt/svn;/ 就是指对全部版本库都具有权限

repositories:/ 表示对库repositories的根目录设置权限

PS:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。

服务svnserve.con配置

代码片段
1 行
vi + svnserve.conf

添加一下内容:

代码片段
11 行
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/opt/svn/repositories

这里注意各标签不能错,也不能有重复,不然无法连接。

配置防火墙端口(如果需要):
不一定每个人都需要设置,可以先测试后再看是否需要打开端口

代码片段
1 行
vi /etc/sysconfig/iptables

添加一下内容:

代码片段
1 行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

保存后重启防火墙

代码片段
1 行
service iptables restart

查看:
a. 启动SVN

代码片段
1 行
svnserve -d -r /opt/svn/repositories

b. 查看SVN进程

代码片段
1 行
ps -ef|grep svn|grep -v grep

root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories

c. 检测SVN端口

代码片段
1 行
netstat -ln |grep 3690

tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN

停止重启SVN:

代码片段
2 行
killall svnserve //停止
svnserve -d -r /opt/svn/repositories // 启动

测试连接:
(1) 在本地电脑上安装TortoiseSVN客户端:
成功安装TortoiseSVN后在电脑桌面右键有TortoiseSVN提示;选择Repo-browser;会出现一个地址栏;

(2)在地址栏输入:svn://+服务器IP地址;如果安装没问题的话就会进入服务器的资源库

Linux服务器端设置svn开机启动

(1)在Linux服务器跟目录((/root路径下))创建一个脚本文件

代码片段
1 行
touch svn.sh

(2)进入脚本文件

代码片段
1 行
vim svn.sh

(3)添加一下内容

Bash
2 行
#!/bin/bash
    /usr/bin/svnserve -d -r  /opt/svn/repositories

解释一下:

这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。

绝对路径怎么查?

代码片段
1 行
which svnserve

(4)改该脚本的执行权限

代码片段
1 行
chmod 777 svn.sh

(5)加入自动运行

代码片段
1 行
vi /etc/rc.d/rc.local

在末尾添加脚本的路径:

代码片段
1 行
/root/svn.sh

(6)重启Linux服务器,重启后查看svn服务器是否已经开启

代码片段
1 行
ps -ef|grep svnserve

如果显示以下信息表示svn已经开启了:
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN

配置多个仓库

linux服务器上配置多个svn仓库

1、在指定目录建立仓库保存总目录,本文示例目录设定为:/usr/local/svn/svnrepos

# mkdir -p /usr/local/svn/svnrepos

2、在总目录中创建两个仓库的文件夹,以及使用命令创建版本库

代码片段
4 行
# mkdir -p /usr/local/svn/svnrepos/warehouse1
# mkdir -p /usr/local/svn/svnrepos/warehouse2
# svnadmin create /usr/local/svn/svnrepos/warehouse1
# svnadmin create /usr/local/svn/svnrepos/warehouse2

3、进入warehouse1 目录下的conf文件夹。将其中的authz与passwd文件复制到svnrepos目录下

代码片段
3 行
# cd /usr/local/svn/svnrepos/warehouse1/conf
# cp authz ../../
# cp passwd ../../

4、修改warehouse1/conf下的svnserve.conf文件,将其中的passwd文件制定与authz文件制定进行修改,其他配置按正常单svn配置。(warehouse2同样设置一遍)

article image

5、修改复制出来的/svnrepos目录下的passwd文件与authz文件
passwd文件:设置账号密码

article image

authz文件

article image

6、启动svn服务

代码片段
1 行
svnserve -d -r /usr/local/svn/svnrepos   (这里目录配到总目录,不是仓库目录)

7、其他
在windows环境检出项目的时候,
仓库1的检出地址为:svn://ip地址/warehouse1
仓库2的检出地址为:svn://ip地址/warehouse2

linux开启多个svn

一.建立svn库

代码片段
2 行
mkdir /opt/svndata/one
svnadmin create /opt/svndata/one

注:这里我将svn库都放在opt在的svndata文件夹下,这里我建立了一个

二.上传项目到指定svn

代码片段
2 行
svn import D:\eclipse\Test svn:/
/192.168.1.105:3690/TestProject -m "TestProject"

三.同时自动开启多个svn
1.创建执行脚本svn.sh(/root路径下),其内容很简单。如下:

Bash
3 行
#!/bin/bash
svnserve -d --listen-port 3690 -r /opt/svndata/one
svnserve -d --listen-port 3691 -r /opt/svndata/two

2.添加可执行权限

代码片段
1 行
chmod ug+x /root/svn.sh

3.添加自动运行
打开(vi或gedit) /etc/rc.d/rc.local,在最后一行添加如下内容:

代码片段
1 行
/root/svn.sh

保存退出

4.检查
重启服务器,使用ps -ef 看看进程是否启动了

提交自动同步更新

Linux下svn文件提交后自动同步更新到网站目录

假如现在有:

SVN版本库中的一个项目:/home/svn/tcyg
网站目录:/home/www/
我们先将SVN版本库中的一个项目checkout到网站目录:

代码片段
1 行
svn co file:///home/svn/tcyg/ /home/www/

这时,网站目录已成为SVN的工作副本,接下来利用SVN的钩子让这个工作副本自动更新。

新建一个post-commit钩子:(The post-commit hook is invoked after a commit.)

代码片段
1 行
vim /home/svn/tcyg/hooks/post-commit

添加以下代码:

Bash
5 行
#!/bin/sh
REPOS="$1"
REV="$2"
export LANG="zh_CN.UTF-8"    #防止乱码 
svn update /home/www/ --username Hwei --password 123456 --no-auth-cache #设置登陆账号密码并不缓存

注:不要遗漏第一行的#!/bin/sh,否则post-commit会报代号255的错误。
保存后,修改文件权限为755,否则SVN无法调用执行:

代码片段
3 行
chmod 755 /home/svn/tcyg/hooks/post-commit
OR:
chmod +x /home/svn/tcyg/hooks/post-commit

OK,至此,就完成了svn文件提交后自动同步更新到网站目录的代码了