1、安装svn
安装:yum install subversion
卸载:yum remove subversion
2、查看svn版本
svnserve --version
可能遇到情况:
svnserve: error while loading shared libraries: libaprutil-1.so.0: cannot open shared object file: No such file or directory
解决方案:
(1) 找到libaprutil-1.so.0文件路径
find / -name libaprutil-1.so.0
结果例:/www/server/apache/lib/libaprutil-1.so.0
(2) 将apr依赖包添加到共享库,查看共享库配置文件
more /etc/ld.so.conf
结果例:include ld.so.conf.d/*.conf
(3) 创建apr共享库配置文件
进入目录:cd /etc/ld.so.conf.d/
新建文件:vi httpd-apr.conf
写入libaprutil-1.so.0文件路径:/www/wdlinux/httpd-2.2.22/lib/
!wq保存
(4)更新共享库配置
ldconfig -v
(5)重复查看svn版本命令(svnserve --version)应该可以了
3、创建版本库
(1) 创建目录: mkdir /var/svn
(2) 创建版本库:
cd /var/svn
svnadmin create /var/svn/svnrepos
此时svnrepos目录下有文件夹conf、db、hooks、locks和文件format、README.txt;
db目录:所有版本控制的数据存放文件。
hooks目录:放置hook脚本文件的目录。
locks目录:用来追踪存取文件库的客户端。
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。
(3) 修改配置文件
cd conf
authz:是权限控制文件。
passwd:是账号密码文件。
svnserve.conf:SVN服务配置文件。
设置密码:
a.vi passwd
b.在 [users] 块中添加用户账号和密码,格式:账号=密码,比如mask = 123456(注意等号两端要有一个空格),保存退出。
设置权限
a.vi authz
b.在末尾添加用户(其中,r表示读,w表示写)
[/]
mask=rw
c.保存退出
修改svnserve.conf文件
a.vi svnserve.conf
b.打开以下几个注释并修改部分参数(注意每行不能以空格开始,等号两端要有一个空格)
anon-access = none #设置为 none,可以使日志日期正常显示
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
c.保存退出
(4) 启动SVN版本库
svnserve -d -r /var/svn/svnrepos
查看SVN服务是否开启:ps -ef |grep svn
停止SVN命令: killall svnserve
4、使用svn钩子实时同步线上项目
例:线上项目:/www/wwwroot/test
svn代码库:/var/svn/svnrepos
注:svn服务器刚搭建完成时,svn代码库(/var/svn/svnrepos)下是没有数据的,windows安装了Tortoise SVN后checkout一下代码库(svn://服务器ip地址)
这时候把要上线的项目添加到刚刚checkout出来的文件夹下commit提交
(1) 同步一份svn代码库代码到线上目录
cd /www/wwwroot/test
svn co svn://localhost #此时/var/svn/svnrepos下的项目会同步到线上目录
(2) 进入/var/svn/svnrepos项目库的 hooks/ 目录下新建 post-commit 文件(post-commit就是钩子,svn每次变更都会执行这个文件)
cd /var/svn/svnrepos/hooks
vim post-commit
在文件中写入:
#!/bin/sh
export LANG=zh_CN.UTF-8
SVN=/usr/bin/svn #这里配置的是svn安装bin目录下的svn文件
WEB=/www/wwwroot/test #线上环境目录地址
LOG=/home/admin/svn/svn_update.log #同步日志
echo `whoami`,$REPOS,$REV >> $LOG
$SVN update $WEB --username mask --password 123456 --no-auth-cache >> $LOG #用户名和密码改为自己的svn用户名和密码
#chown -R 766 $WEB
(3) 保存后设置文件权限
chmod a+x post-commit
(4) 测试
测试svn提交后线上的项目是否会同步,如果有出错,百度上搜一下一般都会有解决方案
5、 开机自启动svn
(1)传统方式
a.首先:编写一个启动脚本svn_startup.sh,我放在/root/svn_startup.sh
#!/bin/bash
/usr/bin/svnserve -d -r /var/svn/svnrepos/ #后面的路径是你的svn服务器路径
注:这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。(绝对路径查看:which svnserve)
b.修改执行权限
chmod 777 svn_startup.sh
c.加入自行启动
vi /etc/rc.d/rc.local
在末尾添加脚本的路径,如:
/root/svn_startup.sh
d.重启查看进程:ps -ef|grep svnserve
(2)centos 7 系统使用以上方式无效,因为/etc/rc.d/rc.local 是没有执行权限的
a.查看svn配置文件
vi /lib/systemd/system/svnserve.service
文件内容如下:
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve #这个就是配置路径
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Install]
WantedBy=multi-user.target
b.编辑配置文件
vi /etc/sysconfig/svnserve
将 OPTIONS="-r /var/svn" 改为 svn 版本库存放的目录(例:/var/svn/svnrepos),保存退出
c.启动服务:systemctl enable svnserve.service
d.查看服务列表:systemctl list-units --type=service
e.重启查看进程