开发者社区> 技术小胖子> 正文

Linux下搭建SVN服务器及自动更新项目文件到web发布目录(wwwroot)的方法

简介:
+关注继续查看

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Semantic Web 文章目录
因为毕设有很大一块是关于Semantic Web的所以要比较全面地了解一样,于是想在这个期间将所知所学都分享一下
638 0
[WS]使用Axis发布简单的Web服务(补充)
这篇帖子是对《使用Axis发布简单的Web服务》的补充。 可以看出,在Axis里书写deploy.wsdd并利用org.apache.axis.client.AdminClient发布,其主要工作就是把<service>标签中的内容添加在server-config.wsdd里,所以一般直接编辑server-config.wsdd文件会更方便一些。
875 0
iOS WebCore的wak目录
《iOS的WebThread》中提到: iOS的WebCore开源码,6.1版本的下载地址为:http://opensource.apple.com/release/ios-61/ 比起webkit.org上的Mac开源码,会多了个wak目录,内有21个文件。
864 0
linux服务器搭建git并配置秘钥及服务器端自动更新
git不同于svn,通常不需要建像svn那摩多的用户,基本上,大家共同使用一个用户,在各自的电脑上配置好公钥及私钥就可以了。 当然,如果你有需求需要多个用户协同管理git仓库,请移步《git多人协作用户权限配置》
71 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载