1、在SVN服务器端准备工作
说明:
服务器操作系统:centos7.3
SVN安装路径:/usr/bin/svn
SVN项目版本库路径:/home/svn/repo --repo为版本库名称
SVN登录账号:admin
SVN登录密码:123456
Web站点根目录:/home/wwwroot/
实现目的:
当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录
2、安装SVN服务器
我在这里直接采用yum安装方式(当然也可以自己去官方下载安装)。
[root@server ~]# yum install subversion -y
[root@server ~]# rpm -qa | grep sub #查看安装文件
subversion-libs-1.7.14-10.el7.x86_64
subversion-1.7.14-10.el7.x86_64
[root@server ~]# svnserve --version #检验已经安装的SVN版本信息
svnserve,版本 1.7.14 (r1542130)
编译于 Nov 20 2015,19:25:09
版权所有 (C) 2013 Apache 软件基金会。
此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。
Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。
下列版本库后端(FS) 模块可用:
* fs_base : 模块只能操作BDB版本库。
* fs_fs : 模块与文本文件(FSFS)版本库一起工作。
Cyrus SASL 认证可用。
3、创建SVN 版本库
[root@server ~]# mkdir /home/svn/repo
[root@server ~]# svnadmin create /home/svn/repo --repo为版本库名称
4、配置svnserve
上述版本库/home/svn/repo建立后,在文件夹下会生成conf文件夹,进入/home/svn/repo/conf下面会有下面3个文件authz 、passwd 、 svnserve.conf。
[root@server ~]# cd /home/svn/repo/
[root@server repo]# pwd
/home/svn/repo
[root@server repo]# ls
conf db format hooks locks README.txt
[root@server repo]# cd conf/
[root@server conf]# ls
authz passwd svnserve.conf
4.1、svnserve.conf 文件, 该文件配置项分为以下5项:
anon-access: 控制非鉴权用户访问版本库的权限。
auth-access: 控制鉴权用户访问版本库的权限。
password-db: 指定用户名口令文件名。
authz-db:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
realm:指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件,配置如下:
-
anon-access = none
-
auth-access = write
-
password-db = passwd
-
authz-db = authz
-
realm = /home/svn/repo
4.2、passwd修改为:
-
[users]
-
admin = 123456 //这里的username和password自己设置
4.3、authz最后加上以下两行(这两行解决了 SVN客户端解决authorization failed问题)
-
[/]
-
* = rw
#################样例#################
[root@singledb conf]# cat authz
[groups] #定义组
admin = admin #创建一个admin组,将用户加入到组
dev=tian,lier,erllo
[/] #根目录权限设置(就是“svn”这个文件夹)
aaa = rw #aaa对svn下的所有版本库有读写权限
[repo:/] #repo:/,表示对repo版本库下的所有资源设置权限
@admin = rw #admin组的用户对repo版本库有读写权限
@dev = rw
#####################################
5、启动svnserve
[root@server conf]# svnserve -d -r /home/svn/repo/
-d表示后台运行
-r 指定根目录是/home/svn/repo/
[root@server conf]# ps -ef | grep svn
root 28950 1 0 19:12 ? 00:00:00 svnserve -d -r /opt/svn/repo/
root 28952 28246 0 19:12 pts/0 00:00:00 grep --color=auto svn
6、停止svnserve
[root@server conf]# ps -aux |grep svn
[root@server conf]# kill -9 进程号 #进程杀掉
7、客户端使用
客户端用svn或者windows下的TortoiseSVN客户端。
1)从服务端checkout版本库(在当前目录下)
svn checkout svn://服务器的ip地址/
例:检出svn库中的内容
[root@server ~]# cd /home/
[root@server home]# svn checkout svn://127.0.0.1/repo
在/home目录下便生成了一个 repo 目录。里面的内容是 版本库中的内容。
执行 ll -a 可以看见 .svn 这边是svn的记录
新增几个文件 touch test.txt
svn add * (一定要在 repo目录下哦,因为要有 .svn呀) #为版本库中添加内容
svn commit -m 'add file' #为版本库中提交内容,一定要对当前版本写注释
删除版本库中的文件
svn delete svn://127.0.0.1/pro/er.txt -m 'del'
注:可以使用带用户名和密码的访问:
svn co --username hello --password 123svn://192.168.233.203/repo
************************************************************************
SVN版本库更新
svn up /svn/repo
上传文件到服务器
[root@server repo]# touch /svn/repo/test.php #所有的动作必须在repo版本库中完成
[root@server repo]# svn add /svn/repo/test.php #上传test.php文件到svn服务器
删除服务器上的文件
[root@server repo]# svn rm /svn/repo/test.php--force
查看版本库内容
[root@server repo]# svn list /svn/repo/
--------------------------------------------------------------------------------------------------------
创建版本库:
终端输入:svnadmin create [路径]
该路径可以是相对路径,例如,当前在home/user/svn/目录下,输入svnadmin create myproject,则该版本库会被创建在home/user/svn/目录下,新建一个文件夹名为myproject,其中便是版本库的文件了。
将文件导入版本库:
终端输入:svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录(反正我试验是这样的),例如版本库的目录是:home/user/svn/myproject/。则应该这样写:file:///home/user/svn/myproject/
例如将当前目录导入版本库myproject:
svn import . file:///home/user/svn/myproject -m"导入文件"
从版本库导出:
导入后原文件并未被纳入版本管理,若想获得受版本控制的文件,就需要从版本库导出
终端输入:svn co [版本库路径]
例如将myproject库中的文件导出到当前目录:svn co file:///home/user/svn/myproject .
*************************************************************************
8、然后配置SVN钩子自动更新项目文件到web目录
钩子 hooks (可以将svn版本库中的内容同步更新到指定目录)
[root@server ~]# cd /home/svn/repo/hooks下
[root@server hooks]# vim post-commit
#!/bin/sh
export LC_CTYPE="zh_CN.UTF-8"
SVN=/usr/bin/svn
WEB_PATH=/home/wwwroot #要强制更新的目录
SVN_USER=admin
SVN_PASS=123456
$SVN update $WEB_PATH --username $SVN_USER --password $SVN_PASS #执行更新
[root@server hooks]# chmod a+x post-commit
[root@server hooks]# cd /home
[root@server home]# ls
www repo
[root@server home]# mv /home/repo /home/wwwroot
#将linux客户端的检出的版本库命名为web的发布目录wwwroot
************************************************************************
文档引自:http://www.cnblogs.com/xuyk/p/6024757.html
一、使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录
cd /home/svn/hooks
cp post-commit.tmpl post-commit
vim post-commit #编辑,添加以下代码
REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
SVN_PATH=/usr/bin
WEB_PATH=/home/wwwroot/
SVN_USER=admin
SVN_PASS=admin
LOG_PATH=/tmp/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH
:wq #保存退出
chown www:www /home/svn/hooks/post-commit #设置脚本所属用户组,www为web服务运行账户和组
chmod +x /home/svn/hooks/post-commit #添加脚本执行权限
说明:
whoami #执行此程序的用户
REPOS="$1" #svn项目绝对路径值
REV="$2" #最新版本号
--no-auth-cache #不保存账户认证信息
二、客户端测试
使用svn客户端添加一个文件之后,进行svn添加并提交操作进入服务器/home/wwwroot目录下可以看到提交到svn的文件已自动更新到web目录下
至此,Linux下SVN服务器自动更新文件到Web目录教程完成。
************************************************************************
取消文件的修改
svn revert 回滚
提交冲突时候解决冲突
svn update
svn resolved 发现文件最新
本文转自MQ_douer 51CTO博客,原文链接:http://blog.51cto.com/douer/1915001,如需转载请自行联系原作者