Linux云计算架构-搭建svn版本控制服务器并在windows下管理版本

Linux云计算架构-搭建SVN版本控制服务器并在windows下管理版本

1. SVN版本控制服务介绍

SVN即Subversion,是一个开放源代码的版本控制系统。采用分支管理系统,逐步取代了CVS。

常见的版本控制服务器CVSSVNGitGitLab
Git是一个开源的分布式版本控制服务。以有效、高速的处理,管理从很小到非常大的项目版本。
GitLab利用Ruby on Rails,是一个开源的版本管理系统。可以通过web界面访问公开或私人项目。可以浏览源代码,管理缺陷和注释。可以浏览提交过的版本并提供一个文件历史库。可以使用简单的wall聊天工具交流。可以使用代码片段收集功能实现代码复用。

SVN官网http://subversion.apache.org/

windows客户端tortoisesvnhttp://tortoisesvn.net/

SVN数据存储方式:
①BDB:BerkeleyDB是一种事务安全型表类型
②FSFS:文件系统方式,较于BDB更安全。不会锁表。

SVN运行方式为C/S模式,默认占用3690端口号,访问方式为SVN://
若借助apache运行,还需占用80端口号。

SVN工作流程【核心:集中式代码管理】:
①上班时下载项目组最新代码
②选择自己的分支,并开始工作,定时提交更新代码。
③下班前整合分支到服务器对应的分支。

SVN+Apache运行机制:
在这里插入图片描述

2. 部署SVN版本控制服务器

# 安装subversion httpd mod_dav_svn
[root@server ~]# yum install -y subversion httpd mod_dav_svn
# 查看已注册端口
[root@server ~]# cat /etc/services | grep svn
svn             3690/tcp                        # Subversion
svn             3690/udp                        # Subversion

# 创建版本库的主目录以及版本库data1和data2
[root@server ~]# mkdir /web_version
[root@server ~]# svnadmin create /web_version/data1
[root@server ~]# svnadmin create /web_version/data2

# 查看下版本库下的文件
# dav目录提供apache和mod_dav_svn使用,用于存储内部数据。新建的版本库没有该目录。
[root@server ~]# ll /web_version/data1
总用量 8
drwxr-xr-x 2 root root  54 9月   4 22:06 conf    # 存放配置文件的目录。包含用户的访问账号、权限等。
drwxr-sr-x 6 root root 233 9月   4 22:06 db      # 所有版本控制的数据存放目录
-r--r--r-- 1 root root   2 9月   4 22:06 format  # 当前文件库配置的版本号
drwxr-xr-x 2 root root 231 9月   4 22:06 hooks   # 存放hook脚本文件的目录
drwxr-xr-x 2 root root  41 9月   4 22:06 locks   # 存放subversion监控锁定数据的目录,用于追踪存放文件库的客户端。
-rw-r--r-- 1 root root 229 9月   4 22:06 README.txt

# 查看下版本库的配置文件
[root@server ~]# ll /web_version/data1/conf/
总用量 12
-rw-r--r-- 1 root root 1080 9月   4 22:06 authz   # 认证、权限
-rw-r--r-- 1 root root  309 9月   4 22:06 passwd  # 用户名和密码
-rw-r--r-- 1 root root 3090 9月   4 22:06 svnserve.conf   # svn主配置文件

修改svn主配置文件:

# 顶格配置
[root@server ~]# vim /web_version/data1/conf/svnserve.conf
19 anon-access = read   # 允许匿名用户读,设置为none,表示匿名用户不允许访问。
20 auth-access = write  # 允许认证用户写
27 password-db = passwd
34 authz-db = authz
39 realm = my data1 version   # 登录提示信息

# 设置用户名和密码【用户名 = 密码】
[root@server ~]# vim /web_version/data1/conf/passwd 
[users]   # 这里表示使用用户认证
abong = 123456
haha = 123456

# 配置用户及用户组权限
[root@server ~]# vim /web_version/data1/conf/authz
[groups]
data_group1 = haha    # 组名 = 用户1,用户2
[/]                   # 当前版本库目录,这里指data1
@data_group1 = r      # @组名 = 权限  rw
abong = rw            # 用户名 = 权限
*=                    # 其他成员均无权限

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

# man svnserve
svnserve允许使用svn网络协议访问Subversion仓库。它可以运行为独立的服务器进程,也可以在xinetd控制下运行。在启动svnserver时,必须选择操作的模式。下列选项也被识别:
-d, --daemon # 使得svnserve以守护进程方式运行。svnserve使自身运行在后台,在svn端口(默认是 3690)监听并提供服务。
--listen-port=port  #使得svnserve在以守护进程方式运行时监听port端口。
--listen-host=host  #使得svnserver监听host指定的接口,可以是一个主机名或是一个IP地址。
--foreground        #当与-d一同使用时,这个选项使得svnserve在前台运行。这个选项主要用于调试。
-i, --inetd         # 使得svnserve使用标准输入/标准输出文件描述符,当它在xinetd控制下运行时应该这样做。
-h, --help          # 显示用法信息,然后退出。
-r root, --root=root   # 为它提供服务的所有仓库设置虚根目录。客户端给出的URL中的路径名将被解释为相对于此“根”目录的路径,不允许超出根目录的范围。
-t, --tunnel        # 使得svnserver运行于隧道模式,操作与xinetd模式类似(在标准输入/标准输出提供一个连接),但是将连接视为已认证的,认证用户就是当前的uid。这个选项是在客户端运行于一个隧道代理上时使用。
-T, --threads       # 当运行在守护进程模式时,使得 svnserve为每个连接产生新线程而不是新进程。svnserve进程在启动时仍然将自身放到后台。
-X, --listen-once   # 使得svnserve接受svn端口的一个连接,提供服务,然后退出。这个选项主要用于调试。一旦客户端通过传递URL选择了一个仓库,snvserve读取这个仓库中名为conf/svnserve.conf的文件,判断特定于仓库的设置信息,例如使用什么认证数据库,接受什么样的认证规则。
# svnserve以守护进程方式运行,指定根目录,即版本库的所在目录。
[root@server ~]# svnserve -d -r /web_version/

# 可以看到有svnserver进程,并且监听端口正常。
[root@server ~]# ps aux | grep svn
root       8309  0.0  0.0 197708  1036 ?        Ss   09:34   0:00 svnserve -d -r /web_version/
root       8318  0.0  0.0 112724   988 pts/0    S+   09:35   0:00 grep --color=auto svn
[root@server ~]# netstat -antup | grep svn
tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      8309/svnserve  

使用svn导入测试代码:

# svn 选项 源码 svn://server ip/项目名/ -m 备注信息
选项:
import # 提交版本
checkout # 下载版本
update # 更新版本
add\delete\copy\move    # 目录操作
status   # 检查状态差异
diff     # 检查文件行级详细差异
revert   # 恢复
resolve  # 解决冲突
switch   # 切换工作拷贝对应的版本库分支
log      # 查看历史记录
list     # 显示文件目录
cat      # 查看某个文件内容
commit   # 提交,类似数据库的事务提交
# 创建文件并提交版本
[root@server ~]# mkdir localsvn
[root@server ~]# cd localsvn/
[root@server localsvn]# touch {1,2}.html
[root@server localsvn]# ll
总用量 0
-rw-r--r-- 1 root root 0 9月   5 09:49 1.html
-rw-r--r-- 1 root root 0 9月   5 09:49 2.html
[root@server localsvn]# echo aaa > a.txt
[root@server localsvn]# echo bbb > b.txt
[root@server localsvn]# ll
总用量 8
-rw-r--r-- 1 root root 0 9月   5 09:49 1.html
-rw-r--r-- 1 root root 0 9月   5 09:49 2.html
-rw-r--r-- 1 root root 4 9月   5 09:49 a.txt
-rw-r--r-- 1 root root 4 9月   5 09:49 b.txt
# 提交代码,在服务器本地提交代码可以使用file
[root@server ~]# svn import /root/localsvn/ file:///web_version/data1/ -m "version 1"
正在增加       localsvn/1.html
正在增加       localsvn/2.html
正在增加       localsvn/a.txt
正在增加       localsvn/b.txt

提交后的版本为 1。

在这里插入图片描述

# 下载代码,一般用于第一次导出版本
[root@server ~]# svn checkout svn://192.168.8.192/data1/ download_version

[root@server ~]# ll download_version/
总用量 8
-rw-r--r-- 1 root root 0 9月   5 10:04 1.html
-rw-r--r-- 1 root root 0 9月   5 10:04 2.html
-rw-r--r-- 1 root root 4 9月   5 10:04 a.txt
-rw-r--r-- 1 root root 4 9月   5 10:04 b.txt

在这里插入图片描述

# add 增加代码,是做了一个新添加的标识
# 需要commit将新添加的代码提交到版本库
# haha用户为下载的版本增加代码,只拥有r权限,不可新增。
# 但是新增的内容还是在本地版本中,没有提交版本到svn服务器。
[root@server ~]# cd download_version/
[root@server download_version]# ll
总用量 8
-rw-r--r-- 1 root root 0 9月   5 10:04 1.html
-rw-r--r-- 1 root root 0 9月   5 10:04 2.html
-rw-r--r-- 1 root root 4 9月   5 10:04 a.txt
-rw-r--r-- 1 root root 4 9月   5 10:04 b.txt
[root@server download_version]# echo ccc > c.txt
[root@server download_version]# svn add c.txt
A         c.txt
[root@server download_version]# svn commit -m "version 2"

在这里插入图片描述

# 使用用户abong提交新增的代码,abong用户拥有rw权限

在这里插入图片描述

3. SVN版本控制服务器的Apache展示

SVN+Apache运行机制可以看出需要mod_dav_svn模块。使用apache展示,本质上就是建立一台虚拟主机。

在这里插入图片描述

# 可以看到是有mod_dav_svn.so模块的
[root@server ~]# cat /etc/httpd/conf.modules.d/10-subversion.conf 
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so

配置apache支持svn,如果没有该文件,可以手动配置。

[root@server ~]# vim /etc/httpd/conf.d/subversion.conf
<Location /web_version>
	DAV svn
	SVNParentPath /web_version
	AuthType Basic
	AuthName "data1"
	AuthUserFile /web_version/svn/passwd
	AuthzSVNAccessFile /web_version/svn/authz
	Require valid-user
</Location>

创建用户认证文件:

# 创建密码文件
[root@server ~]# mkdir /web_version/svn
[root@server ~]# htpasswd -c /web_version/svn/passwd user1
New password: 
Re-type new password: 
Adding password for user user1
[root@server ~]# htpasswd -m /web_version/svn/passwd user2
New password: 
Re-type new password: 
Adding password for user user2
[root@server ~]# htpasswd -m /web_version/svn/passwd user3
New password: 
Re-type new password: 
Adding password for user user3
[root@server ~]# cat /web_version/svn/passwd
user1:$apr1$uML2vHoq$p.Ey4TC6nH9RJiVFR.E1a1
user2:$apr1$ICnCXt99$PFEvFL6AJoVaUKW2Gjyl5/
user3:$apr1$9cScLoWb$Ujv6xSObG4TWtBZo0fvjY/
# 用户及用户组授权文件
[root@server ~]# cat /web_version/svn/authz
[groups]
all = user1,user2   # 用户组all
# [/]   所有版本库
[data1:/]   # data1版本库
@all = rw   # 对用户组授权
[data2:/]   # data2版本库
user2 = rw  # 对用户授权
user3 = rw

# 重启httpd服务,并加入到开机自启。
# 如果在重启httpd服务时,遇到无法重启,可以检查下默认端口号80是否被占用。
[root@server ~]# systemctl  restart httpd
[root@server ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

# 开放80端口号,没有开放的要开放访问。
[root@server ~]# firewall-cmd --list-ports 
80/tcp

输入网址:http://192.168.8.192/web_version/data1/

在这里插入图片描述

4. windows下使用tortoiseSVN工具下载和提交版本

tortoiseSVN工具下载地址:https://tortoisesvn.net/downloads.html

一直下一步即可安装“小乌龟”。
在这里插入图片描述

创建一个目录svn,用于存放本地版本。

在这里插入图片描述

从svn服务器上下载版本到本地:

在这里插入图片描述

输入用户名和密码:

在这里插入图片描述

可以看到data1版本库的所有内容都已经从SVN服务器上下载下来了。

在这里插入图片描述

在这里插入图片描述

新增一个文件,并把该文件提交到SVN服务器:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

提交失败,原因可能是通过apache的url上传,data1版本库的所有者和所属组要改为apache。

在这里插入图片描述

[root@server ~]# chown -R apache:apache /web_version/data1

再提交一次,可以看到已经提交成功了。
在这里插入图片描述

通过该工具,可以实现版本的下载、修改后提交等功能。通过版本库的URL也可以看到文件test已经提交到版本库了。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/108422597