搭建SVN版本控制服务器-阿里云开发者社区

开发者社区> 余二五> 正文

搭建SVN版本控制服务器

简介:
+关注继续查看

搭建SVN版本控制服务器

一:实验目标

实战:搭建svn服务器+ apache版本控制服务器 

二:实验环境

                 系统版本: rhel-server-6.5-x86_64-dvd

SVN+apache服务端:xuegod63.cn IP192.168.1.63

客户端:xuegod64.cn IP192.168.1.64

服务概述:

    由于各个公司所对服务的需求不同,会安装各种不同版本的服务软件,所以管理起来会很困难。在此环境中,会出现代码冲突,项目不同版本的发布困难甚至代码整合期间会出现bug。如果一个项目是由多个开发人员共同开发的,但是这些个开发人员都不在个地方,那么如何来完成这个项目的开发呢?随着问题的出现,应运而生了各种版本控制软件。其中市场上较为常见的版本控制软件有cvs,svn和git。Cvs已经成为了过去式,svn是当下较为流行的,是cvs的接班人。

 

Svn的运行模式有两种

模式

端口

运行模式

svn

3690

C/S

svn+apache

80

C/S

svn的基本工作原理:

    服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里德项目文件下载到本地,然后开发人员可以在本地修改,然后用svn命令进行提交,由源代码库统一管理修改。

wKiom1gKA6KxR1-ZAAAnKtY1HCs711.png-wh_50 

mod_dav_svn的作用

     由于Subversion需要版本化的控制,因此标准的HTTP协议不能满足需求。要让Apache与Subversion协同工作,就要使用WebDAV(Web-basedDistributedAuthoringandVersiong)Web分布式创作和版本控制协议。WebDAV是HTTP1.1的扩展,关于WebDAV的规范和工作原理,可以参考IETFRFC2518。简单的说mod_dav_san模块就是作为Subversion与Apache之间的接口的连接线,通过它,Apache就可以访问版本库,并且可以让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问

 

三:实验代码

环境安装svn.apachemod_dav_svn模块  

[root@xuegod64 ~]# vim /etc/services

wKioL1gKA-DxPZkDAAASrlUDK3w331.png-wh_50 

[root@xuegod63~]#yum install subversion httpd mod_dav_svn -y

 

配置xuegod63上的svn服务器

1建立一个用户,用于管理SVN版本库类似于这个库的管理员

[root@xuegod63~]#useradd svn


2创建版本库目录,并修改相应权限管理员对这个库的权限

[root@xuegod63~]#mkdir /var/repos

[root@xuegod63~]#chown svn.svn /var/repos


3创建两个项目仓库。 svn1和svn2

[root@xuegod63 ~]# su - svn

[svn@xuegod63 ~]$ svnadmin create /var/repos/svn1   

[svn@xuegod63 ~]$ svnadmin create /var/repos/svn2 #管理员创建版本控制仓库svn

[svn@xuegod63 ~]$ cd /var/repos/svn1

[svn@xuegod63 svn1]$ ls

conf  db  format  hooks  locks  README.txt

[svn@xuegod63 svn1]$ ls conf/

authz  passwd  svnserve.conf 

 

查看配置中的各个文件的作用

[root@xuegod63 repos]# cat /var/repos/svn1/conf/authz

注释: 

每个文件的作用

Authz

权限

Passwd

用户名和密码

svnserve.conf

服务器的配置文件

 

[root@xuegod63 repos]# cat /var/repos/svn1/conf/svnserve.conf

anon-access = none

#匿名访问的权限,可以是read,write,none,默认为read,如果你不愿意匿名共享请配置为none

auth-access=write

#认证用户的权限,可以是read,write,none,默认为write

password-db=passwd

#密码数据库的路径,去掉前面的#,默认使用的是同一目录下的passwd文件作为用户认证方式

authz-db=authz

#权限验证文件

realm=svn1

#此选项指定库的认证领域。

 

[root@xuegod63 conf]# cat /var/repos/svn1/conf/passwd

注:格式为:用户名=密码

注意

1.

一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口戒密码提示,除非你的anon不为none,否则将迒回一个错误。

2.

里的密码都是明文没有加密的。

 

4:修改配置文件authz

[root@xuegod63 conf]# vim /var/repos/svn1/conf/authz #在最后添加以下内容:

参数说明:[groups]

Admin = tube

#创建一个组admin,admin组中有成员tube。

[/] @admin = rw

#表示admin组中所有成员,可以读写/var/repos中所有文件。

[/var/repos/svn1]

user1 = rw

rw(表示user1能够读写/var/repos/svn1目录下的所有信息)

[/var/repos/svn2]

user2=r 

user2=r(表示user2能够读/var/repos/svn2目录下的所有信息)

 

5:启动SVN服务器

#使用用户svn来管理版本库目录/var/repos,则须转为svn用户,命令如下: 

[svn@xuegod63 conf]$ svnserve -d -r /var/repos/

d

表示以daemon方式(后台运行)运行

r

指定根目录是/var/repos

[svn@xuegod63 conf]$ netstat -antup | grep 3690

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

 

6:iptables开放服务器端口 :svn默认端口是3690

[root@xuegod63 ~]# iptables -A INPUT -p tcp --dport 3690 -j ACCEPT

[root@xuegod63 ~]# /etc/init.d/iptables save

 

7:管理员上传源代码到库中

[root@xuegod63 ~]# cp extundelete-0.2.4.tar.bz2 /home/svn #拷贝到管理员家中

[svn@xuegod63 ~]$ tar jxvf extundelete-0.2.4.tar.bz2

[svn@xuegod63 ~]$ mv extundelete-0.2.4 extundelete

[svn@xuegod63 ~]$ cd extundelete

[svn@xuegod63 extundelete]$ ls

acinclude.m4  config.h.in   depcomp     Makefile.am  README

aclocal.m4    configure     install-sh  Makefile.in  src

autogen.sh    configure.ac  LICENSE     missing

 

 

8:管理员把源代码导到SVN服务器上--独立服务器的方式

[svn@xuegod63 ~]$ svn import extundelete/ file:///var/repos/svn1 -m 'svn v1'wKiom1gKA-7DMzWnAAATXDj5tvQ824.png-wh_50 

 

9:查看apache支持subversion两个动态库有没有安装成功。  

[root@xuegod63 conf]# vim /etc/httpd/conf.d/subversion.conf #看到下面配置文件中两个模块相关信息,说明安装成功。

LoadModule dav_svn_module    modules/mod_dav_svn.so

LoadModule authz_svn_module  modules/mod_authz_svn.so

 

配置xuegod63上的apache服务器

1:配置apache支持SVN

[root@xuegod63 ~]# vim /etc/httpd/conf/httpd.conf #apache使用的用户和组都改为svn的管理员

User svn

Group svn

 

2:配置apache下的svn,知道仓库,认证路径等

[root@xuegod63 ~]# vim /etc/httpd/conf.d/subversion.conf

<Location /svn>

DAV svn

SVNParentPath /var/repos #仓库的根目录

AuthType Basic  #认证类型

AuthName "Subversion repository"  #认证窗口,弹出的消息

AuthUserFile /home/svn/passwd  #认证用户的路径

AuthzSVNAccessFile /home/svn/auth  #建立本地项目版本库的权限控制文件

Require valid-user

</Location>

 

3:建立访问控制文件/home/svn/passwd---类似于代码开发人员的用户

#后期通过httpd服务器访问svn时,会使用个文件中的用户信息验证用户和密码。

生成用户和密码的工具

[root@xuegod63 ~]# which htpasswd

/usr/bin/htpasswd

[root@xuegod63 ~]# rpm -qf /usr/bin/htpasswd

httpd-tools-2.2.15-29.el6_4.x86_64  

[root@xuegod63 ~]# htpasswd -c /home/svn/passwd tube # -c #如果没有/home/svn/passwd则创建。会提示你输入密码,默认是MD5加密

New password: 123456

Re-type new password: 123456

[root@xuegod63 ~]# htpasswd /home/svn/passwd mk #后期再创建时,就不需要加-c参数,否则,会把之前添加到/home/svn/passwd中信息,全部覆盖。

[root@xuegod63 ~]# htpasswd /home/svn/passwd testuser3

查看用户名和密码:

[root@xuegod63 ~]# cat /home/svn/passwd

tube:ll7IH3i5G0JfU

mk:KvoOCCmj2qla2

testuser3:tSp3bA63WPGXU

 

4:建立本地项目版本库的权限---类似于代码开发人员的权限

[root@xuegod63 ~]# vim /home/svn/auth #写入以下内容

[/]

tube = rw

[svn1:/]

@group1 = rw

 = rw

[svn2:/]

@group2 = rw

[groups]

group1 = testuser1,testuser2

group2 = testuser3,testuser4

 

解释:

[/] # 表示所有仓库的根目录

tube = rw # 表示tube用户对所有仓库的根目录都有rw权限 

[svn1:/] #表示仓库svn1的根目录

@group1 = rw #group1组中的用户对svn1仓库有读写权限 如果在前面加上@符号,则表示是个群组权限设置,

mk = rw # mk用户对svn1仓库具有读和写权限

[svn2:/]

@group2 = rw

[groups]

group1 = testuser1,testuser2 // 个表示某群组里的成员

group2 = testuser3,testuser4

 

5:重启httpd服务,访问svn

[root@xuegod63 ~]# service httpd restart

用户的作用总结

用户名

对所属库的权限

Svn

是svn服务器中的库管理员

Tube

是对整个svn库拥有读写权限

Mk

是对svn库中的svn1库拥有读写权限,类似于开发人员

Testuser3

是对svn库中的svn2库拥有读写权限,并且Testuser3属于group2类似于开发人员

测试svn版本控制服务器

 

svn的访问地址是: http://192.168.1.63/svn/svn1

1:测试开发人员对不同库的访问权限:

   1)http://192.168.1.63/svn/svn1 ,输入用户: mk 密码: 123456

 

wKioL1gKA_6zSI6QAABEWJ_P5ak501.png-wh_50

wKiom1gKA_6RgBW6AABbWGXQO8I956.png-wh_50

 

  2)http://192.168.1.63/svn/svn2 ,输入用户: mk 密码: 123456

 

wKioL1gKBAnRmZOUAABJADGFAIg196.png-wh_50

wKiom1gKBAmxw0_4AAA4rhmygrU062.png-wh_50

 

   3)http://192.168.1.63/svn/svn2/ 用户:testuser3 ,密码:123456 可以访问svn2

wKiom1gKBBfSLRfKAABDYXC5os4535.png-wh_50

wKiom1gKBBfTTIGeAAAyClfsc-0209.png-wh_50

 

 

2:测试开发人员对库中采取的不同动作

1) 把本地项目extundelete-0.2.4.tar.bz2整个源代码导入到版本库: svn2中。 没有导入前,svn2仓库初始版本为 0 

语法:svn 源代码目录 file:///path/to/repos -m "最后的个注释不能少"

[svn@xuegod63 ~]$mkdir test1

[svn@xuegod63 ~]$ tar jxvf extundelete-0.2.4.tar.bz2

[svn@xuegod63 ~]$svn import extundelete-0.2.4/ file:///var/repos/svn2 -m 'svn2 v1'

wKioL1gKBCTTNzyrAABSpPF6wNc539.png-wh_50 

#这里不再为0,显示为1,说明监控版本变化成功

 

2)取回项目代码

方法1: 直接在svn中取回

语法:svn checkout file:///var/repos/svn1 目录

[svn@xuegod63 ~]$ svn checkout file:///var/repos/svn1  new

或者

[svn@xuegod63 ~]$ svn checkout file:///var/repos/svn1

#将svn1版本库中的文件取回到目录aaaa中,没有aaaa目录,将自动生成一个aaaa目录。 如果不指定目录,直接存到当前目录下,将以svn1仓库的名字命名并创建对应的目录。

wKioL1gKBDGxdMI1AAAulg8ZT9Y787.png-wh_50#除了代码以外,多了一个 .svn 目录

 

方法二:通过http协议

[svn@xuegod63 ~]$svn checkout http://192.168.1.63/svn/svn1 bbb

Authentication realm: <http://192.168.1.63:80> Subversion repository

Password for 'root': 直接回车

Authentication realm: <http://192.168.1.63:80> Subversion repository

Username: mk

Password for '':123456

wKiom1gKBD6gI8CkAAA11Eb6R-k036.png-wh_50 

 

3:xuegod64中测试testuser3访问:

[root@xuegod64 ~]# svn checkout http://192.168.1.63/svn/svn1 bbb

Authentication realm: <http://192.168.1.63:80> Subversion repository

Username: testuser3

Password for 'testuser3':

svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://192.168.1.63/svn/svn1'

 

4:修改添加删除文件后,提交代码。

[root@xuegod63 test3]# svn checkout http://192.168.1.63/svn/svn1 extundelete

Authentication realm: <http://192.168.1.63:80> Subversion repository

Password for 'mk':

[svn@xuegod63 ~]$ cd extundelete

[svn@xuegod63 ~]$ cp /etc/hosts c.txt

[svn@xuegod63 ~]$cp /etc/hosts b.txt

[svn@xuegod63 ~]$ cp /etc/hosts a.txt

[svn@xuegod63 ~]$ svn add c.txt #添加一个文件到版本库中

  c.txt

[root@xuegod63 svn1]# svn delete autogen.sh #从版本库中删除一个文件

 autogen.sh

[root@xuegod63 extundelete-0.2.4]# ls #查看,没有没有autogen.sh 文件了

[root@xuegod63 extundelete]# svn status #查看项目当前状态。

? a.txt

? b.txt

A c.txt

D autogen.sh

 

提交修改:

[root@xuegod63 extundelete-0.2.4]# svn commit -m #"注释,添加一个文件c.txt" #提交你的改变到版本库中,后面参数为此次提交的注释.

[root@xuegod63 extundelete-0.2.4]# svn list # 列出版本库中当前目录下的文件 

[root@xuegod63 extundelete]# svn move c.txt mk.txt #c.txt文件更名为mk.txt

A mk.txt

D c.txt

 

5:xuegod64取出版本: 

[root@xuegod64 svn1]# svn checkout http://192.168.1.63/svn/svn1/

[root@xuegod64 svn1]# svn co http://192.168.1.63/svn/svn1/ 










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1864400,如需转载请自行联系原作者

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

相关文章
版本控制技巧转载链接汇总
1.cornerstone的showblame: https://www.zennaware.com/cornerstone/helpbook/pages/working/annotations/index.html
591 0
版本控制工具之SVN
虽然现在很多用git,但是SVN也是之前一代的神
800 0
RESTful API如何进行版本控制
本文将帮助您理解为什么需要版本控制,以及如何对REST API进行版本控制。我们将讨论4种版本控制的方法,并比较不同的方法。
17 0
Windows下使用VisualSVN Server搭建SVN服务器
使用 VisualSVN Server来实现主要的 SVN功能则要比使用原始的 SVN和Apache相配合来实现源代码的 SVN管理简单的多,下面就看看详细的说明。 VisualSVN Server的下载地址如下,是免费的,随意不必有顾虑 http://www.visualsvn.com/server/download/ SVN 的下载地址如下 http://tortoisesvn.net/downloads.html 【1】使用SVN,首先要安装TortoiseSVN,就是上面的SVN下载地址。
1795 0
RESTful API如何进行版本控制
本文将帮助您理解为什么需要版本控制,以及如何对REST API进行版本控制。我们将讨论4种版本控制的方法,并比较不同的方法。
10 0
Spring Cloud 版本控制
Spring Cloud 版本控制
165 0
SUV的配置及使用(搭建SVN服务器端)|学习笔记
快速学习SUV的配置及使用(搭建SVN服务器端)
24 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载