文档章节

linux安装svn服务器,配置提交同步更新到服务器

东子
 东子
发布于 2016/11/01 20:13
字数 3853
阅读 741
收藏 42
点赞 2
评论 0

VN版本控制服务

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。也是就是CVS的接班人!

CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。

官方网站:http://subversion.apache.org/

Windows客户端 TortoiseSVN:http://tortoisesvn.net/ 

常见的版本控制软件

CVS,逐渐被SVN取代,是CVX重写版和改写版

SVN,Subversion

Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

SVN存储数据的方式

BDB,Berkeley DB,一种事务安全型表类型

FSFS,"FSFS" 采用文件系统的方式, 替代原来的基于Berkeley DB的实现.

因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

SVN的运行方式及端口

独立服务器 3690端口 访问方式SVN://    C/S模式

借助apache运行 80端口 访问方式 http:// 

工作流程

集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:开始新一天的工作:

1、从服务器下载项目组最新代码。

2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码

(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。

3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。

SVN+Apache运行原理

SVN搭配Apache的时候,Apache需要使用mod_dav_svn这个模块,他的运行机制如下:

 

 

 

在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。

每个用户在使用源代码库之前,首先要把源代码库里德项目文件下载到本地,然后开发人员可以在本地修改,左后用svn命令进行提交,由源代码库统一管理修改。

mod_dav_svn 可以让版本库通过http协议实现网站展现

构建SVN版本控制服务器

SVN+HTTP Server (XueGod63)========== Client Server(XueGod64)

检查是否已安装

rpm -qa subversion

如果要卸载旧版本

yum remove subversion

软件安装

 

#包括HTTP所需模块一起装(httpd mod_auth_mysql 是安装配合Apache的模块,你可以只装subversion,多装了也无所谓)
[root@XueGod63 ~]# yum install -y subversion httpd mod_dav_svn

#查看已注册
[root@XueGod63 ~]# cat /etc/services | grep --color svn

svn             3690/tcp                        # Subversion
svn             3690/udp                        # Subversion

创建版本库目录

#存放版本库的主目录
[root@XueGod63 ~]# mkdir /www/svn/

#创建项目
#svnadmin命令是由subversion这个软件包提供的
[root@XueGod63 ~]# svnadmin create /www/svn/test_project


#随便查看一个版本库
[root@XueGod63 ~]# ls /www/svn/test_project

conf  db  format  hooks  locks  README.txt

dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有

db目录:就是所有版本控制的数据存放文件

hooks目录:放置hook脚本文件的目录

locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端

format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号

conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件

[root@XueGod63 ~]# ls /www/svn/test_project/conf/

authz  passwd  svnserve.conf

authz           #认证权限相关

passwd      #用户名和密码

svnserve.conf          #服务器配置文件

针对不同版本库修改配置文件

接下来的一段用于配置使用哪种授权登录方式;

#修改xuegod.cn的配置文件
[root@XueGod63 ~]# vim /www/svn/test_project/conf/svnserve.conf

[general]

anon-access = none           #对于匿名用户,无访问权限,这里必须为none,因为只有设为none,在客户端才能看到每次提交的备注信息

auth-access = write          #对于授权用户,有写权限,可以是read,write,none

#password-db = passwd     #用户名和密码都是明文存放在同级目录下的passwd文件中;优点是高效配置简单,缺点是安全性弱,明文总不是那么让人感觉可靠

authz-db = authz             #认证权限文件,取消注释即可

realm = test_project   #指定授权所属的域,PHP的同志可将其理解为名字空间;

#接下来是[sasl]段,用于标识是否进行SASL加密处理;

use-sasl = true

min-encryption = 128

max-encryption = 256

#变量 min-encryption 和 max-encryption 控制服务器所需要的加密强度。

注意:此配置文件的所有内容必须顶格,否则会报错

配置用户和密码及认证权限

#设置用户名和密码
[root@XueGod63 ~]# vim /www/svn/test_project/conf/passwd

[users]    

Find = 123456

HA = 123456

user = 123456

#末尾添加上面三行

#对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会

出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误

#这里的密码都是明文,没有加密

#设置用户和组的权限
[root@XueGod63 ~]# vim /www/svn/test_project/conf/authz

[groups]                     #此行默认存在了
test_group = Find,HA         #定义组,在[groups]下面添加

                               #用户组格式 用户组名 = 用户1,用户2

                               #一个组可以包含多个用户,英文逗号间隔,用户名必须是在passwd中存在的

[test_project:/]                             #/表示我当前所在版本库目录,这里代表test_project

@test_group = rw             #@test_group表示这个组的权限,就是上面定义的组的成员

* =                             #除了上面的有赋予权限成员之外,其他的成员都没有权限

SVN目录格式:

                        [/目录名]

                        @用户组名 = 权限

                        用户名 = 权限

                        * = 

SVN使用SASL加密

1.配置svnserve.conf,注释掉password-db = passwd

并启用sqsl:use-sasl = true

2.新建一个svn.conf文件,一般放在/usr/lib/sasl2或者/etc/sasl2,内容为:

pwcheck_method: auxprop

auxprop_plugin: sasldb

sasldb_path: /home/svnadmin/config/sasldb

mech_list: DIGEST-MD5

其中sasldb_path 指定你打算将sasl加密的数据库放置的位置;

注释:pwcheck_method指明检查的方法,这里是“auxprop ”,这个pwcheck_method还对应了如启动一个代理作为认证服务等方式,而现在的意思就是使用本文件说的方式去检查。然后我们指明auxprop_plugin为sasldb,也就是使用一个文件存放用户名密码,也就是/www/svn/test_project/sasldb,其它的认证信息存放plugin还有sql和ldapdb。而mech_list指明了认证信息传递机制。

svnserve 已经在运行,你需要重启服务,并确保它读取了更新后的配置参数

killall svnserve //停止svnserve服务

svnserve –d –r /www/svn //启动svnserve服务

3.创建用户和密码

使用saslpasswd2 程序

语法:saslpasswd2 –c –f /www/svn/test_project/sasldb –u [svnserve.conf里面配置的realm名字] [username]

eg:saslpasswd2 -c  -f /home/svnadmin/config/sasldb -u examPro colin

会出现交互界面,提示输入两次密码;

附:

saslpasswd2 -d -f home/svnadmin/config/sasldb -u 用户名//删除用户

sasldblistusers2 -f /home/svnadmin/config/sasldb // 查询用户

PS:如果访问库的时候出现以下提示 "Could not obtain the list of SASL mechanisms",原因是Linux默认没有安装DIGEST-MD5,此时,可用以下命令安装更新:yum install cyrus-sasl-md5 , cyrus-sasl-md5首页:http://asg.web.cmu.edu/sasl/, 安装包下载地址:ftp://ftp.andrew.cmu.edu/pub/cyrus/

配置完成。

服务SVN启动及创建测试代码

#启动了所有版本库,如果只需要某一个版本库,
#在-r后面添加/www/svn/test_project/的版本库即可 -d=daemon -r=root of directory of save指定根目录
[root@XueGod63 ~]# svnserve -d -r /www/svn/

#查询到下面这行内容就可以了
[root@XueGod63 ~]# ps -aux | grep svn

root     17107  0.0  0.0 199020  1028 ?        Ss   23:30   0:00 svnserve -d -r /www/svn/

root     17446  0.0  0.0 110228   892 pts/0    S+   23:32   0:00 grep --color=auto svn

[root@XueGod63 ~]# netstat -antup | grep svn

服务正常

tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      17107/svnserve

使用svn导入测试代码

导入测试代码格式:   svn [选项] 源码  svn://server ip/项目名

常见的选项:

import:将未版本化的文件纳入版本控制并提交 checkout:从版本库中检出一个修订版 update:更新工作拷贝 add,delete,copy,move:增、删、复制、移动文件或目录

status:检查状态差异 diff:检查文件行级详细差异

revert:恢复 resolve:解决冲突

switch:切换工作拷贝对应的版本库分支 log:查看历史记录

list:显示文件目录 cat:查看某个文件内容

开放svn端口

默认是3690端口,你也可以用别的。已开启的跳过这一步

vi /etc/sysconfig/iptables

#修改
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT

#保存
service iptables save

#重启
service iptables restart

#查看
/etc/init.d/iptables status

在网站根目录建立SVN版本库

为了避免每次都重新输入SVN账号密码,可修改以下配置

[root@localhost public_html]# vim /root/.subversion/servers

# store-plaintext-passwords = no

改为

store-plaintext-passwords = yes

建立版本库

#打开网站根目录,我的根目录是/www/web/test_com/public_html
[root@XueGod63 ~]# cd /www/web/test_com/public_html

#在网站根目录建立版本库,由于当前已经在网站根目录,所以用 . 表示建立版本库的目录
#也可以使用绝对路径 /www/web/test_com/public_html
[root@XueGod63 ~]# svn checkout svn://192.168.1.2/test_project .

#提示输入SVN帐号和密码,输入以上设置的SVN帐号密码即可

提交网站根目录的源码到SVN服务器

把网站的所有文件提交到SVN服务器

#把项目加入到SVN库,并提交
[root@XueGod63 ~]# svn add app/
[root@XueGod63 ~]# svn add include/
[root@XueGod63 ~]# svn add template/
[root@XueGod63 ~]# svn add runtime/
[root@XueGod63 ~]# svn add index.php

[root@XueGod63 ~]# svn commit -m "初次提交"

在开发环境(本地)检出项目

在本地项目检出SVN,SVN地址:svn://192.168.1.2/test_project

d:守护进程
-r:svn根目录
假设服务端IP为192.168.1.2,那么如下设置后test_project的访问目录就为:

svn://192.168.1.2/test_project

比如 帐号密码为上面设置的Find = 123456,检出。

SVN上传时同步到服务器其它目录

同步程序思路:用户提交程序到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具体实现细节

post-commit脚本

能看到一堆模版钩子文件,我们需要的是post-commit.tmpl,

copy一份,命名为post-commit。然后修改;

编辑文件:

sudo vim /www/svn/test_project/hooks/post-commit

注意:编辑完成post-commit后,给予可执行权限:

sudo chmod -R 755 /www/svn/test_project/hooks/post-commit

内容:

#!/bin/sh

#设置语言环境
##这行比较重要,需要根据你的服务器环境选择正确的语言环境,否则,这个update不会工作
export LANG=zh_CN.UTF-8

#设置SVN更新时需要同步更新的目录,这里发现不加username和password也是可以的
#svn update /www/web/test_com/public_html --username yoursname --password yourpwd
sudo svn update /www/web/test_com/public_html

这样在本地SVN提交代码后,服务器的代码也会自动从SVN更新。

注意:svn仓库文件夹的other必须要有执行权限不然脚本无法执行。SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码如果只是手动一样会更新,但自动一样的不行。

启动和停止SVN服务

启动SVN服务

svnserve -d -r /www/svn/

描述说明:
-d 表示svnserver以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库。

如果想监听其他端口,使用

svnserve -d -r /www/svn/ --listen-port 88

停止SVN服务

killall svnserve

设置开机自启动

安装好的svn服务端,默认是不会开机自启动的,每次开机自己启动会很麻烦,我们可以把它设成开机启动。

首先:编写一个启动脚本svn_startup.sh,我放在/www/svn/svn_startup.sh

#!/bin/bash
/usr/bin/svnserve -d -r /www/svn/ --listen-port 88

如果是部署为外网,这里自定义了88端口,需要注意检出地址需要加上自定义的端口号。(貌似自定义端口号后不能使用post-commit自动提交了,会提示拒绝连接,还没有找到使用自定义端口连接的方法)

这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。
绝对路径怎么查?

which svnserve

这里还有可能碰到一个问题,如果你在windows下建立和编写的脚步,拿到linux下,用vi或者vim修改后可能会无法执行,这是文件格式的问题:

vi svn_startup.sh

#输入:set ff 回车

#如果显示的结果不是fileformat=unix

#再次输入

set ff=unix

#就OK了

然后修改该脚本的执行权限:

chmod ug+x svn_startup.sh

#或者万能的

chmod 777 svn_startup.sh

最后,加入自动运行:

vi /etc/rc.d/rc.local

#在末尾添加脚本的路径,如:

/www/svn/svn_startup.sh

现在,你可以重启一下试试了。 不懂得怎么确认成功?败给你了

ps -ef|grep svnserve

 

© 著作权归作者所有

共有 人打赏支持
东子

东子

粉丝 8
博文 25
码字总数 8434
作品 2
深圳
程序员
CentOS 创建SVN 服务器,并且自动同步到WEB 目录

CentOS 创建SVN 服务器,并且自动同步到WEB 目录 标签: centossvnsubversion服务器 2013-12-06 10:09 5492人阅读 评论(0) 收藏 举报 分类: linux(5) 一、安装Subversion yum install su...

thinkyoung ⋅ 2015/12/30 ⋅ 0

SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)

背景情况:SVN与WEB不在同一台服务器上,需要SVN提交后WEB站点自动进行SVN UPDATE更新,查阅网上的教程,发现部分的细节和权限部分没有提到导致跨服务器ssh执行更新脚本失败,手动执行post-...

PartyAnimals ⋅ 06/21 ⋅ 0

Svn结合hook实现自动发布及多Project管理更新

项目目的 出于管理需要,也需要在公司内部实现自动发布流程。当开发机提交SVN代码之后,自动同步到测试服务器进行测试。 工作原理 hook简单介绍 配置svnserve 创建多项目代码仓库 配置集中认...

ljpwinxp ⋅ 04/19 ⋅ 0

svn中 更新,提交,与资源库同步等操作

只有提交会导致服务器上发生变化 更新操作只是把服务器上最新版本下载到客户端,规则如下: 1、如果你本地的某个文件没有修改过,而服务器上的这个文件别人已经提交过新版本,那么会用服务器...

说回答 ⋅ 06/05 ⋅ 0

实战:使用SVN+apache搭建一个版本控制服务器

SVN简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说...

寰宇01 ⋅ 06/14 ⋅ 0

【git学习】SVN项目迁移到Git操作指南

2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情。 git学习——>在CenterOS系统...

qq446282412 ⋅ 05/19 ⋅ 0

CentOS7 下搭建svn服务器

一、yum安装subversion 1. 安装 2. 查看安装版本,检查安装是否成功 3. 查看安装位置 二、创建版本库 1. 创建用于存放版本库的目录 2. 创建svn版本库 3. 创建完后,版本库目录下会生成一些文...

Mr_ET ⋅ 05/23 ⋅ 0

CentOS下通过yum安装svn及配置

CentOS下通过yum安装svn及配置 1.环境 centos5.5 2.安装svn yum -y install subversion 3.配置 建立版本库目录 mkdir /www/svndata svnserve -d -r /www/svndata 4.建立版本库 创建一个新的S...

thinkyoung ⋅ 2015/12/10 ⋅ 0

全自动发版部署工具 - patch-generator-desk

patch-generator-desk 项目增量补丁包神器:全自动web增量打包发版,支持git/svn,支持多模块项目。 - Author:aaron - [项目地址:https://gitee.com/hackempire/patch-generator-desk] - [e...

em_Aaron ⋅ 05/02 ⋅ 0

CentOS7 构建httpd+svn+ifsvnadmin配置

CentOS7 构建httpd+svn+ifsvnadmin配置 标签(空格分隔): 运维系列 一:安装相关软件包 1.1: 安装apache服务器 1.2:安装svn服务器(其中,moddavsvn是apache服务器访问svn的一个模块) 1.3...

flyfish225 ⋅ 05/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 51分钟前 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部