在Linux下搭建SVN服务器

1、使用Linux yum安装工具安装subversion

yum install subversion


2、查看SVN安装位置和使用方法

输入rpm -ql subversion 可以查看安装位置,一般会安装在/usr/bin下面。我们知道svn在bin目录下生成了几个二进制文件。

输入 svn --help可以查看svn的使用方法。


3、创建svn版本库目录

mkdir -p /var/svn


4、创建版本库

svnadmin create /var/svn/svnrepos

执行了这个命令之后会在/var/svn/svnrepos目录下生成如下这些文件

conf    db    format    hooks    locks    README.text


5、进入conf目录(该svn版本库配置文件)

authz文件是权限控制文件

passwd是帐号密码文件

svnserve.conf SVN服务配置文件


6、设置帐号密码

vi passwd

在[users]块中添加用户和密码,格式:帐号=密码,如david=123456


7、设置权限

vi authz

在末尾添加如下代码:

[/]

david=rw

wayne=r

意思是版本库的根目录david对其有读写权限,wayne只有读权限。


这里也可以对用户进行分组划分权限

[groups]

user_group = david

view_group = wayne


[project:/]

@user_group = rw

@view_group = r

表示版本库根目录user_group成员有读写权限,view_group成员只有读权限。


8、修改svnserve.conf文件

vi svnserve.conf

打开下面的几个注释:

anon-access = read #匿名用户可读

auth-access = write #授权用户可写

password-db = passwd #使用哪个文件作为账号文件

authz-db = authz #使用哪个文件作为权限文件

realm = /var/svn/svnrepos # 认证空间名,版本库所在目录


9、启动svn版本库

svnserve -d -r /var/svn


注意:

第8步,修改svnserve.conf 文件时。解开注释时要注意,同时要删除#后面的空格,否则报错:svnserve.conf:12: Option expected


常用SVN命令

启动:svnserve -d -r /var/svn

关闭:killall svnserve

查看:ps -ef|grep svn


然后要设置自启动


vi /etc/rc.local    

打开自启动文件

文件内容如下


#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.


touch /var/lock/subsys/local

添加下面一行

svnserve -d -r /var/svn/svnrepos


保存退出




svn命令:


lsof -i :3690   查看svn是否启动


ps aux |grep 'svn'  查找所有svn启动的进程


kill -9 2505    杀死2505这个查找到的svn进程


svnserve -d -r /var/svn/svnrepos 启动svn(可以把这个放到/etc/local/rc.local文件中,实现开机自启动)




5.客户端连接

 

svn co svn://ip/svnrepos

用户名/密码:myname

 

6.实现SVN与WEB同步,可以CO一个出来,也可以直接配在仓库中

 

1)设置WEB服务器根目录为/home/www/webroot

 

2)checkout一份SVN

 

svn co svn://localhost/svnrepos /home/www/svnrepos

修改权限为WEB用户

chown -R www:www /home/www/webroot/svnrepos


3)建立同步脚本

 

cd /home/www/svndata/svnrepos

/hooks/

cp post-commit.tmpl post-commit

编辑post-commit,在文件最后添加以下内容

 

export.UTF-8

SVN=/usr/bin/svn

WEB=/home/www/svnrepos

$SVN update $WEB --username myname --password myname --no-auth-cache  --no-auth-cache 是不记住用户缓存(增加了这个之后就能提交后不出现错误,版本错误除外)


chown -R www:www $WEB

增加脚本执行权限

 //可不用

chmod +x post-commit


这样,我们上传svn后,生产站点就能立马显示出来了,自动化程度高了很多。


备注:

设置svn开机自启动

    编辑文件 /etc/sysconfig/rc.local

    添加一行   svnserve -d -r /var/svn/repositories



为svn用户组赋予权限

chown -R root:svn /home/svndata/svnrepos

chmod -R g+rws /home/svndata/svnrepos

    /*给svn组赋予读写权限,可以根据需要更改相应权限*/  

chmod -R o-rwx /home/svndata/svnrepos/*删除其他无关人员的读、写、执行权限,默认情况下可能其他人有读权限*/  






只用配置SVN同步的方法


只记录hooks 下的 post-commit文件内的内容


#!/bin/sh

REPOS="$1"

REV="$2"

export.UTF-8

svn update /home/www/webroot --username testuser --password 123456 --no-auth-cache


-username 是svn里的用户名,--password 是SVN用户的密码


--no-auth-cache 是不记住用户缓存(增加了这个之后就能提交后不出现错误,版本错误除外)


export.UTF-8 设置编码格式


注意:给post-commit增加运行权限



svn钩子程序上传文件中文文件导致报错的处理办法

Warning: 钩子 “post-commit” 失败(退出代码 1) 输出:
svn: E000022: Error converting entry in directory '/home/wwwroot/itmall' to UTF-8
svn: E000022: Can't convert string from native encoding to 'UTF-8':
svn: E000022: ?\230?\149?\176?\230?\141?\174?\229?\186?\147

在钩子程序中 svn update 之前增加

export LANG=en_US.UTF-8

如需转载,请注明出处: https://chadou.me/p/78

最新发布