一.安装SVN
//检查是否安装
rpm -qa subversion
//卸载旧版本
yum remove subversion
//安装最新版本
yum install subversion
//检查是否安装成功
svnserve --version
(--之后一般跟选项的完整名称,-之后一般跟选项的单个字母缩写)
二.创建项目仓库
//创建目录
mkdir -p /var/svn/svnrepos
//创建项目仓库
svnadmin create /var/svn/svnrepos
//检查是否创建成功
cd /var/svn/svnrepos
(若成功里面会多一些文件夹)
三.配置项目库
//采用默认配置. 以下语句都必须顶格写, 左侧不能留空格, 否则会出错.
//进入conf目录,下面有三个配置文件authz passwd svnserve.conf
cd conf
//配置passwd,等号左边是用户名,右边是密码,例如
wangyang=wangyang
//配置authz,在文末加入用户名和读写权限
wangyang=rw
//配置svnserve.conf
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
password-db = password
authz-db = authz # 访问控制文件
realm = imagine's svn server # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
四.开放SVN端口
//修改防火墙
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
//保存设置
/etc/rc.d/init.d/iptables save
//重启iptables
service iptables restart
//启动svn服务
svnserve -d -r /var/svn/svnrepos
五.连接SVN
使用 TortioseSVN 连接到 svn://我的 ip 地址/
输入前面设置的用户名密码即可访问
六.配置开机启动
编写脚本 svn_startup.sh,放在/root/svn_startup.sh,代码如下
#!/bin/bash
export LC_CTYPE="zh_CN.UTF-8"
/usr/bin/svnserve -d -r /var/svn/svnrepos
然后
//修改脚本权限
chmod ug+x svn_startup.sh
//添加自启动
vim /etc/rc.d/rc.local
//在文件末尾添加命令行脚本
/root/svn_startup.sh
六.通过hooks使得SVN可以自动同步网站代码
//checkout网站工作目录
svn co svn://localhost /var/www/html/ --username user --password passwd
//将工作目录转移到钩子文件夹
cd /var/svn/svnrepos/hooks
//添加配置文件
cp post-commit.tmpl post-commit
//修改 post-commit 文件,加入以下代码
#!bin/sh
export LANG=zh.CN.UTF-8
/usr/bin/svn update /var/www/html/ --username wangyang --password wangyang --no-auth-cache
echo `date`,`whoami`,$REPOS,$REV >>/var/svn/svnrepos/hooks/svn_hook.log
//给予 post-commit 文件以可执行权限
chmod +x post-commit
七.个人配置中出现的一些常见错误
#1. Repository UUID 'xxxxxxxx' doesn't match expected
UUID 'xxxxxxxx'
Finished!
#解决办法如下
1、首先查看项目的所有者的UUID
# svnlook uuid /var/svn/svnrepos
62b86956-73d9-2945-ba87-0546d71898f9
2、更新项目的UUID
# svnadmin setuuid /var/svnrepos 6aed1349-fe9f-9245-a4a0-02dba53eb2d0
3、查看一下更新后的UUID
# svnlook uuid E:/SVN_ROOT/mydoc
附:
UUID是repository创建时自动生成的一个随机数, SVN Client利用UUID判断是否为同一个resp。一般遇到UUID不同时,需要重新checkout。
#2. Warning: post-commit hook failed (exit code 255) with no output.
#解决办法如下
chown root post-commit
chmod +x post-commit
如果执行提交时SVN提示255错误,则是 post-commit 脚本文件的权限不对,post-commit 脚本必须有 +x 权限。
#3.使用tortoisesvn提交更新老是出现问题
#解决办法如下
./post-commit
直接在服务器上运行post-commit,观察错误信息
#4.svn "cannot set LC_CTYPE locale" 问题以及LANG, LC_CTYPE, LC_ALL值的设置
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is en_US.UTF-8
svn: warning: please check that your locale name is correct
Type 'svn help' for usage.
#解决办法如下
export LC_ALL=C
source /etc/profile
可以在/etc/profile中查看以上命令是否生效,生效后会在该文件中看到export LC_ALL=C