- 一、安装SVN服务器">一、安装SVN服务器
- start-commit 提交前触发事务
- pre-commit 提交完成前触发事务
- post-commit 提交完成时触发事务
- pre-revprop-change 版本属性修改前触发事务
- post-revprop-change 版本属性修改后触发事务
- !/bin/sh
- export LANG=en_US.UTF-8
- sudo svn update /var/www —username mysmaile —password Mys862394 —no-auth-cache >> $LOG_PATH
- sudo svn co svn://localhost/ /var/www —username $SVN_USER —password $SVN_PASS
- sudo svn co svn://localhost/ /var/www —username mysmaile —password Mys862394
- 备注:创建钩子文件后,需要重启svn服务。
- svn不支持中文路径问题的解决">svn不支持中文路径问题的解决
一、安装SVN服务器
1 安装svn
sudo apt-get install subversion(root用户可以去掉sudo)2 创建目录
cd /srv sudo mkdir svn cd svn sudo mkdir tone_src #svn的版本仓库存放目录3 创建版本仓库
当前位置在/srv/svn/tone_src sudo svnadmin create /srv/svn/tone_src 执行之后tone_srv下文件结构如下:4 配置
我们需要修改conf目录下的三个文件,authz,passwd,svnserve.conf(1)编辑svnserve.conf
[general]#匿名用户不可读
anon-access = none
#权限用户可写
auth-access = write
#密码文件为passwd
password-db = passwd
#权限文件为authz
authz-db = authz
(2)编辑authz
[groups]admin= mysmaile #admin组的用户为tone [/] #必须写/,因为这表示从仓库的目录开始设置权限
@admin =rw #admin组有rw(读写权限),所有人有r(读权限)
*=r 注释:这里组的名字不一定叫admin,组的名字可以任务,admin组有多个用户的话,可以这样制定admin=tone,tone1,tone2等。
(3)编辑passwd文件,设定用户密码
[users]# harry = harryssecret
# sally = sallyssecret
mysmaile=Mys862394 #设定用户tone的密码是www,是的没错,密码是明文的。
5 启动SVN服务器
sudo svnserve -d -r /srv/svn #启动服务器 -d 已守护模式启动 -r 指定svn版本库根目录,这样是便于客户端不用输入全路径,就可以访问版本库了。 例如:svn://ip:port/tone_src6 验证svn功能及使用方法
由于我们只搭建了SVN服务器,所以在外网访问时只能通过SVN协议访问仓库内容。 也就是svn://ip:port/repository (1)如果你想通过浏览器访问,也就是http/https协议进行访问,那么你需要再安装apache服务器,然后把svn当做apache服务器的模块去运行,那时候就可以利用http://ip:port/repository的方法去访问了。SVN的“Invalid authz configuration”错误的解决方法
在修改配置文件(authz)后,客户端可能会报“Invalid authz configuration”的错误提示!
客户端没有提示错误原因,但在服务器端有一个方法,可以检查配置文件(authz)错在了哪里;
具体方法如下:
svnauthz-validate /data/svn/LQPLAY/conf/authz
它查出了是配置文件(authz)的第167行,出现了错误。
svnauthz-validate: /data/svn/LQPLAY/conf/authz: 167: Option must end with ‘:’ or ‘=’
然后,可以用如下命令,编辑它并保存:
root@server:~# vi /data/svn/LQPLAY/conf/authz
Shift+: set number (显示行号)
Shift+: 167 (直接跳转到167行)
我发现是本该写为(gaojs = rw),不小心写成了(gaojs - rw)。
字母键(I-Insert),从浏览模式,切换到插入模式;
(Shift+:, 从浏览模式,切换到底行命令模式)
(Esc,从其他模式,退出到浏览模式)
修改后保存退出!
Shift+: wq (Write & Quit)
查看SVN的目录在哪里?
whereis svn
svn: /usr/bin/svn /usr/bin/X11/svn /usr/share/man/man1/svn.1.gz
查看SVN的进程是哪些?
ps aux | grep svn
root 1527 0.0 0.0 69640 1092 ? Ss 10:53 0:00 svnserve -d -r /data/svn/LQPLAY
root 5144 0.0 0.0 13592 936 pts/2 S+ 11:58 0:00 grep —color=auto svn
启动SVN的服务(-d:Deamon; -r:Root)
svnserve -d -r /home/svn
查看SVN的服务是否正常(端口号3690是否存在)
netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1527/svnserve
7、同步更新 [勾子]
同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。
知识点:
1、SVN的hooks
start-commit 提交前触发事务
pre-commit 提交完成前触发事务
post-commit 提交完成时触发事务
pre-revprop-change 版本属性修改前触发事务
post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现
post-commit脚本
编辑文件:sudo vim /home/xiaozhe/svn/mypro/hooks/post-commit
注意:编辑完成post-commit后,执行:
sudo chmod 755 post-commit
内容:
!/bin/sh
REPOS=”$1”
REV=”$2”
export LANG=en_US.UTF-8
export LANG=”zh_CN”
SVN_PATH=/usr/bin
WEB_PATH=/var
SVN_USER=mysmaile
SVN_PASS=Mys862394
LOG_PATH=/tmp/svn.log
echo date "+%Y-%m-%d %H:%M:%S"
>> $LOG_PATH
echo whoami
,$REPOS,$REV >> $LOG_PATH
sudo svn update $WEB_PATH —username $SVN_USER —password $SVN_PASS —no-auth-cache >> $LOG_PATH
sudo svn update /var/www —username mysmaile —password Mys862394 —no-auth-cache >> $LOG_PATH
sudo svn co svn://localhost/ /var/www —username $SVN_USER —password $SVN_PASS
sudo svn co svn://localhost/ /var/www —username mysmaile —password Mys862394
exit 0
备注:创建钩子文件后,需要重启svn服务。
停止服务器 killall svnservesudo svnserve -d -r /var/svn
利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。
svn不支持中文路径问题的解决
LANG=”en_US”时,如果服务器上的文件名中包含中文,则check out失败 解决方法 export LANG=”zh_CN” svn的授权文件authz默认是不支持中文路径的,因此在精确控制中文文件夹的授权时往往会出错。要解决这个问题,需要用UltraEdit(注意不要用记事本或写字板)把authz打开,然后另存在为UTF-8 -无BOM,如下图:以后要编辑authz文件也需要用UltraEdit进行编辑和保存,用记事本或写字板编辑后保存也会自动带上windows特有的unicode标记。[