搭建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命令进行提交,由源代码库统一管理修改。

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

[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'

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

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

 

 

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

 

 

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'

#这里不再为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仓库的名字命名并创建对应的目录。

#除了代码以外,多了一个 .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

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 #添加一个文件到版本库中

A   c.txt

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

D  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/ 

搭建SVN版本控制服务器相关推荐

  1. 搭建 SVN Linux服务器

    前: 需求: 应美术项目组要求,搭建一台SVN版本控制服务器,以供后续版本的保存 环境: SVN服务器:采用Linux端(较为稳定,当然也可以选择Windows的更好操作) SVN客户端:采用Wind ...

  2. 阿里云ECS,搭建SVN+Apache服务器

    为什么80%的码农都做不了架构师?>>>    在CentOS 7下,搭建SVN+Apache服务器: 1.先检查是否已经安装了httpd服务,如下表示已经安装 [root@iZ23 ...

  3. 使用SVN+apache搭建一个版本控制服务器

    服务端: IP:192.168.10.63 服务概述: SVN(subversion)是近年来崛起的版本管理工具,是CVS的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.作为一个运维 ...

  4. 基于阿里云Ubuntu搭建SVN版本控制

    目录 前言 步骤1:检查是否已经安装SVN 步骤2:正式安装SVN 步骤3:创建项目版本库 步骤4:更改配置 步骤5:启动SVN服务 步骤6:远程访问 SVN 拉代码 步骤7:开机自动启动SVN服务 ...

  5. 如何搭建SVN的服务器

    安装系统:centos6.3 01 安装SVN yum -y install subversion 02 完成安装后,通过查看SVN版本确认安装成功 svnserve --version 03 创建版 ...

  6. 基于阿里云服务器搭建SVN服务器

    基于阿里云服务器搭建SVN服务器 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/8577784 作者 ...

  7. 百度网盘+Visual SVN Server(windows)搭建SVN个人仓库

    百度网盘,我买了会员,你懂得,非会员,上传下载速度太慢!! 百度网盘,有"同步空间",(其实,这个也可以作为svn服务器使用,但是 是自动同步,不太好) 下面的内容是我拷贝的:Vi ...

  8. linux备份svn仓库脚本,Centos详细搭建svn以及备份脚本

    Centos6.1详细搭建svn独立服务器 1准备源码包:2个源码包一个是Subversion-1.6.20.tar.gz一个是Subversion-deps-1.6.20.tar.gz 源码安装目录 ...

  9. 使用Docker搭建svn服务器教程

    使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...

最新文章

  1. devops和docker_通过免费的2小时Docker课程学习DevOps基础知识
  2. Docker(二):Docker 容器使用
  3. mysql调试索引_10 分钟让你明白 MySQL 是如何利用索引的?
  4. 监控系统或者网站服务器的报警及复位,机房监控系统标准和常见故障
  5. 困了。还得背课文。变词型
  6. Android之面试题总结加强版(一)
  7. 二项式法在负荷计算机的应用,7.5二项式法确定计算负荷
  8. react在线浏览doc_如何把doc文件转换成PDF格式?教你一招秒实现
  9. 瑞萨RH850F1L用户手册(UM)CAN接口部分中文翻译(Section 19 CAN Interface (RS-CAN))
  10. c语言atm机实训目的意义,计算机实习目的与意义
  11. 合作共赢,共同飞跃 | DDG一站式数字化转型集成解决方案正式发布
  12. oracle数据库设计思维导图,Oracle
  13. 根据网址搜索类似的网站
  14. 使用深度学习进行目标检测
  15. 系统自学Java语言(学习视频整理)
  16. WIN7双系统卸载与重装Ubuntu
  17. CSS---cursor鼠标属性
  18. ad19pcb设置恢复默认_电脑主板BIOS设置详解BIOS知识大全
  19. Font Management Essential Training 字体管理基本培训 Lynda课程中文字幕
  20. 存储技术与智能存储组件

热门文章

  1. go同一个目录下的go文件里面不能有多个package
  2. shellinabox的安装使用
  3. 一意孤行,360继续奉行互联网恐怖主义
  4. 数据科学家最常用的10种算法
  5. python读取caffemodel文件
  6. pox 中 openflow.webservice 组建的学习与使用
  7. WPF 4 DataGrid 控件(基本功能篇)
  8. Linux创建jupyter notebook和jupyter lab, windows可远程访问
  9. MAC Opencv include选择
  10. pod出现include of non-modular header inside framework module 错误